今天第一次使用appfuse框架创建ssh继承架构,遇到了一系列的问题,下面简单总结一下
1.在控制台上进入到项目目录下执行mvn appfuse:copy-templates命令,本应该在src/test/resources/appfuse/
下面导入dao,model,service,web四个模版,结果并没有成功导入进来
对此的解决办法就是,去github官网上搜索appfuse,在appfuse/plugins/appfuse-maven-plugin/src/main/resources/appfuse/下面就有这四个模版,将其下载下来到手动导入项目的src/test/resources/appfuse/路径下
2.在model层的实体类中,所有的id都没有@column,没有映射到对应表中的字段,所以我们需要对src/test/resources/appfuse/model/Ejb3PropertyGetAnnotation.ftl文件进行修改
<#if property.equals(clazz.identifierProperty)><#rt/>
<#lt/>${pojo.generateAnnIdGenerator()} @DocumentId
在原文件上述字段后面添加 ${pojo.generateAnnColumnAnnotation(property)}<#rt/>
就能够完美解决
3.我们知道发生BeanCreationException的情况有很多,今天我又见到新的一种,一哥们在表中添加的字段类型是个xx类型,而在实体类中字段属性没有对应上,因此报出该异常,这种异常不好检查,以后尽量注意,不要犯这种错误。
4.创建新的model的dao和service时,appfuse自主创建的GenericManagerImpl其中有一个构造方法需要子类传入dao
public GenericManagerImpl(GenericDao<T, PK> genericDao) {
this.dao = genericDao;
}
这和我们自己搭建的ssh框架所创建的GenericManagerImpl类略有不同,因此我们必须在子类中把子类的dao传入父类之中
这种传入方式有两种
(1)private DepartmentDao departmentDao;
@Autowired
public DepartmentManagerImpl(DepartmentDao departmentDao){
super(departmentDao);
this.departmentDao=departmentDao;
}
(2) @Autowired
public void setUserDao(final UserDao userDao) {
this.dao = userDao;
this.userDao = userDao;
}
第二种方法之所以可以这样传是因为父类的dao是这样的
protected GenericDao<T, PK> dao;
这些是我在学习的时候遇到的一些小问题,以此记录。