请注意:完整SSCCE且可重现的源代码为here on my GitHub repo。就像README说的那样,只需克隆并运行./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
导致编译器问题,我无法在普通的'Java'中重现。在编译时,它会在unexpected token
处抱怨n=@Column(name="customer_id")),
错误。
任何人都可以复制并弄清楚发生了什么(以及解决方法是什么)?
答案 0 :(得分:2)
然而,AttributeOverrides导致编译器问题,我无法在普通内容中重现。 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 {
// ...
}