在java项目中正确使用 GORM 的方法
使用 @Entity 注解,不要实现 GormEntity 接口
添加实体类到 HibernateDatastore 中
开发 DataService 接口和抽象实现类
编写一个 DataService 的 bean factory,并配置到 spring 中
错误使用时会遇到的问题
Groovy 的 Joint Compile 产生的 GORM entity 类存根代码缺少 hasMany 属性的方法
D:\git\java\gorm-for-java-standalone\src\main\groovy\Main.java:37: 错误: 找不到符号
phone.getButtons().addAll(Arrays.asList(powerButton, volumeButton));
^
符号: 方法 getButtons()
位置: 类型为Phone的变量 phone
实体是这样的
@Entity
class Phone {
BigDecimal price
// hasMany association, a Phone has many buttons
static hasMany = [buttons: Button]
// one-to-one association, a Phone has only one screen
static hasOne = [screen: Screen]
}
显示添加一个 Set buttons 属性才勉强通过编译。
接着有报告编译错误
D:\git\java\gorm-for-java-standalone\src\main\groovy\Main.java:40: 错误: 找不到符号
Phone loadedPhone = phoneService.getById(phone.getId());
^
符号: 方法 getId()
位置: 类型为Phone的变量 phone
因为 entity 中没有显式定义 id 属性,这个是 entity 会自动提供的属性,但是编译为存根时必须有显式定义。
给Entity 显式添加 id 属性后,就可以成功编译了。
如何在 spring 中指定一个 Package 类型的参数值?
可以使用 Spring EL 表达式,如下:
<list>
<value type="java.lang.Package">#{T(com.telecwin.gorm.example.entity.Phone).getPackage()}</value>
</list>
hasMany 属性为 null 的问题
人工添加的 hasMany 属性,用 getButtons() 获取时,得到的是一个 null 而不是集合。