请注意:完整SSCCE可复制的源代码是 here on my GitHub repo 。就像自述文件所说,只需克隆并运行 ./gradlew clean build
即可重现我所看到的错误。
我正在为 Groovy(不是 Java)Spring Boot 应用程序设计数据模型,该应用程序将使用 Hibernate/JPA 从 MySQL 读取/写入实体。我的所有实体都将扩展一个抽象 BaseEntity
,它提供 PK 以及另一个标识符(“refId
”)。例如:
@Canonical
@Entity
@MappedSuperclass
abstract class BaseEntity {
@Id
Long id
String refId
}
@Canonical
@Entity
@AttributeOverrides({
@AttributeOverride(name = "id", column=@Column(name="customer_id")),
@AttributeOverride(name = "refId", column=@Column(name="customer_ref_id"))
})
class Customer extends BaseEntity {
@Column(name = "customer_name")
String name
@Column(name = "customer_fav_food")
String favoriteFood
}
如您所见,因为每个实体都扩展了 BaseEntity
,并且因为我希望每个子类/实体/表都有自己的 id
和 列名称>refId
字段,我需要在每个子类中使用该 AttributeOverrides
声明。
但是 AttributeOverrides
导致编译器问题,我无法在普通的 ole' Java 中重现该问题。在编译时,它会在 n=@Column(name="customer_id")),
处提示 unexpected token
错误。
任何人都可以重现并弄清楚发生了什么(以及修复方法是什么)吗?
最佳答案
However AttributeOverrides is causing a compiler issue that I can't reproduce in plain ole' Java.
与 Java 的编译器不同,Groovy 的编译器将 { ... }
作为 Closure而不是数组。您应该使用 [ ... ]
代替,就像这样:
@Canonical
@Entity
@AttributeOverrides([
@AttributeOverride(name = "id", column=@Column(name="customer_id")),
@AttributeOverride(name = "refId", column=@Column(name="customer_ref_id"))
])
class Customer extends BaseEntity {
// ...
}
关于Hibernate/JPA @AttributeOverrides 与 Groovy 不能很好地配合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43279688/