由数据库控制的Hibernate时间戳版本。

3
我正在使用Hibernate注释和Sybase。我希望设置版本列以防止锁定。数据库需要管理时间戳而不是应用程序。我想使用注释而不是hbm.xml来实现这一点。
我尝试了以下方法,但没有成功:
我在jboss.org上阅读到要使用
@org.hibernate.annotations.SourceType.DB
@org.hibernate.annotations.Generated(GenerationTime.ALWAYS)

然而,我在编译DB时遇到了一个IDE错误,错误信息为“找不到符号 符号: class DB 位置: 类SourceType”。
同时也出现了rowVersion的编译错误,
版本字段或属性不是受支持的类型之一。请确保它是以下类型之一:int、Integer、short、Short、long、Long、java.sql.Timestamp。
时间属性必须标记@Temporal注释。

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html#d0e5785

5.1.3.2. 时间戳

示例代码

@Version
@org.hibernate.annotations.SourceType.DB
@org.hibernate.annotations.Generated(GenerationTime.ALWAYS)
@Column(name = "row_version")
private Date rowVersion;

public Date getRowVersion() {
    return rowVersion;
}

public void setRowVersion(Date rowVersion) {
    this.rowVersion = rowVersion;
}

有人能告诉我我错过了什么吗?

1个回答

3

这不是一个注释,而是枚举类型的一个字段:

@org.hibernate.annotations.SourceType.DB

你需要在你的领域中使用这个:

@Version
@org.hibernate.annotations.Source(SourceType.DB)
@org.hibernate.annotations.Generated(GenerationTime.ALWAYS)
@Column(name = "row_version") //maybe unnecessary, because this annotation
                              //is only needed, if the column name does not
                              //match hibernate's default naming strategy
                              //(or custom strategy).
@Temporal(TemporalType.TIMESTAMP)
private Date rowVersion;

谢谢,最后一个问题,你是如何处理日期数据类型的。IDE要求我使用@Temporal注释标记时间属性。 - Code Junkie
我应该使用哪种日期时间? - Code Junkie
只需将Temporal注释添加到字段中即可。(例如,像Version一样) - Markus
1
Markus,我认为应该是@Temporal(TemporalType.TIMESTAMP)。 - Code Junkie
@Markus,有没有 JPA 的替代方案? - Jigar Shah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接