Java Persistence / JPA:@Column vs @Basic

JPA中的@Column@Basic注释之间有什么区别? 他们可以一起使用吗? 他们应该一起使用吗? 还是其中一个足够?

  • @Basic表示要坚持一个属性,并使用标准映射。 它的参数允许你指定属性是否被延迟加载以及是否为空。

  • @Column允许您指定要将属性保存到的数据库中的列的名称。

如果你指定一个没有对方,那么你会得到默认的行为是合理的,所以通常人们只使用一个例外情况。

所以,如果我们想要一个属性的延迟加载,并指定一个列名,我们可以说

  @Basic(fetch=FetchType.LAZY) @Column(name="WIBBLE") 

如果我们需要默认的,非懒惰的行为,那么@Column就足够了。

除了@ djna的回答,值得注意的是@OneToMany @ManyToOne@ManyToMany @OneToMany@ManyToOne@ManyToMany进行比较。 只有其中一个可以在任何属性上指定。 可以指定@Column@JoinColumn以及其中的任何一个来描述数据库列属性。 这些是可以一起使用的两组注释,但是每次只能使用一组注释。

值得注意的是,Basic是为原始字段devise的

http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes

基本属性是属性类是简单types(如String,Number,Date或原始types)的属性。 基本属性的值可以直接映射到数据库中的列值。

支持的types和转换依赖于JPA实现和数据库平台。 使用不直接映射到数据库types的types的任何基本属性都可以序列化为二进制数据库types。

在JPA中映射基本属性的最简单方法是什么都不做。 任何没有其他注释并且不引用其他实体的属性将自动映射为基本的,甚至是基本types的序列化。 该属性的列名称将被默认,与属性名称相同,名称大写。