如果我使用
,则在实体中@Lob
private String data;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
然后该字段在数据库中创建为varchar(255)
但是,如果我这样使用:
private String data;
@Lob
public String getData() {
return data;
}
@Lob
public void setData(String data) {
this.data = data;
}
然后该字段在数据库中创建为text
。
我认为在这两种情况下,数据库中都应该是text
。
@Target
的{p> javax.persistence.Lob
为@Target(value={FIELD, METHOD})
,所以我认为这可能是一个错误。
这是一个错误,还是你知道一个说明差异的文件?
相关的pom.xml文件
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.5.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.5.Final</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.2-1004-jdbc41</version>
</dependency>
答案 0 :(得分:2)
在第一种情况下,很可能注释是错误的。这就是它回归默认的原因。如果没有建议持久性提供程序,则不支持在getter和字段中混合持久性注释。从不咨询制定者的注释。如果真的需要,那么AccessType是正确的工具。
示例:
@Entity
public class Box {
@Id
int id;
@Lob //here is right place because also 'id' does have annotation in field
String code;
@Lob //this annotation is ignored because 'id' does have annotation in field
//if getId() (instead of field) is one with annotation,
//then this is right place
public String getCode() {
return code;
}
@Lob // persistence annotation here is not at all supported
public void setCode(String code) {
this.code = code;
}
}
Hibernate使用@Id注释的位置来确定访问类型字段或属性。根据JPA 2.0规范,注释的不一致放置根本不是大声的,所以不能保证它应该如何表现:
访问类型为的实体层次结构中的所有此类 以这种方式违约必须保持一致 对字段或属性的注释,例如单个, 一致的默认访问类型适用于层次结构。