我正在使用Hibernate注释和Sybase。我正在寻找一个版本列来防止锁定。数据库需要管理时间戳而不是应用程序。我想使用注释而不是hbm.xml来实现这一点。
我尝试了以下但没有成功,
我在jboss.org上阅读使用
@org.hibernate.annotations.SourceType.DB
@org.hibernate.annotations.Generated(GenerationTime.ALWAYS)
但是我收到了DB编译错误, “找不到标志 符号:类DB location:class 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;
}
有人能告诉我我错过了什么吗?
答案 0 :(得分: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;