如何将 Groovy GORM 独立地用于 Java 项目

在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 而不是集合。

发布了63 篇原创文章 · 获赞 25 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/yangbo_hr/article/details/104889060