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的序列化。 该属性的列名称将被默认,与属性名称相同,名称大写。