Java Persistence/JPA:@Column vs @Basic

Hos*_*Aly 114 java persistence jpa

JPA @Column@Basic注释之间有什么区别?它们可以一起使用吗?如果他们可以一起使用吗?或者其中一个是否足够?

djn*_*jna 143

  • @Basic表示要保留属性并使用标准映射.它有一些参数,允许您指定是否要延迟加载属性以及它是否可以为空.

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

如果您指定一个没有另一个,那么您将获得合理的默认行为,因此通常人们只使用一个,但特殊情况除外.

因此,如果我们想要延迟加载属性并指定列名,我们可以说

 @Basic(fetch=FetchType.LAZY)
 @Column(name="WIBBLE")
Run Code Online (Sandbox Code Playgroud)

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

  • @Basic(可选)在保存到DB之前(应该)由持久性提供程序在运行时检查.@Column是数据库中的列定义,用于生成模式:http://stackoverflow.com/questions/2899073/basicoptional-false-vs-columnnullable-false-in-jpa (16认同)
  • JPA注释可以分为两组:纯关系注释与实现注释.纯关系注释包含:Entity,Basic,OneToOne,OneToMany,ManyToMany,......而实现注释提供了如何将纯理论模型映射到真实数据库的线索:表,列,...在您的问题'基本'是一个注释,用于提供有关关系实体属性的信息,而'Column'提供有关如何将其映射到数据库列的信息. (7认同)
  • 这是一个明确的答案.谢谢.所以我假设可以使用`@ Basic`而不使用`@ Column`,这就是为什么两者都存在`optional`和`nullable`属性的原因.我对吗? (2认同)
  • 那个“不偷懒”的人称为EAGER。大声笑 (2认同)

Hos*_*Aly 48

除了@ djna的答案之外,值得注意的是@Basic应该与之比较@OneToMany,@ManyToOne@ManyToMany.在任何属性中只能指定其中一个.

@Column并且@JoinColumn可以与其中任何一个一起指定来描述数据库列属性.

这些是可以一起使用的两组注释,但每次只能使用一组注释.


Gab*_*ica 21

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

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

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

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

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

  • 否,如果未指定列注释,则应用默认值(名称将是属性一)。 (2认同)