mox*_*xim 2 java jpa version embeddable
当我在 @Embeddable 中使用 JPA @Version 注释时,我得到以下指向我的Updateable类的异常:
org.hibernate.AnnotationException: Unable to define @Version on an embedded class
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
org.hibernate.AnnotationException: Unable to define @Version on an embedded class
Run Code Online (Sandbox Code Playgroud)
@Embeddable
public class Updateable {
@Version
private long modcount;
private String updatedBy;
private DateTime updatedAt;
// getters & setters
}
Run Code Online (Sandbox Code Playgroud)
在@Embeddable 中不可能有@Version,还是这个Hibernate 特定的?
可嵌入类只是声明可重用实体元素的一种方便方式,即您Updateable可以在其他实体中使用而无需再次添加字段和映射。
因此,嵌入式是实体的一部分(顾名思义,它们是嵌入式的),因此独立的版本控制没有意义。
@Version仅将注释添加到 embeddable 也没有多大意义,因为 embeddable 本身无法进行版本控制,并且您必须处理单个实体中包含多个 embeddable 的情况(例如,在这种情况下应该使用哪个版本?)。因此,由于@Version仅对实体有意义,因此仅允许对实体或映射的超类进行该注释会更容易。
实际上,虽然 JPA 规范建议版本属性是数字、字符串或时间戳,但 Hibernate 似乎提供了用户定义的版本类型:
版本列可以是数字(推荐的解决方案)或时间戳。Hibernate 支持任何类型的类型,前提是您定义并实现了适当的 UserVersionType。
因此,如果您想Updateable用作您的版本,您可能能够做的事情(未测试,只是从文档中派生而来)是提供自定义用户类型Updateable,然后像这样使用它:
@Entity
public class SomeEntity {
@Id
private Long id;
@Type( "your.custom.UserVersionType" )
@Version
private Updateable updateAudit;
// other stuff
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2636 次 |
| 最近记录: |