问题

JPA中@Column@Basic注解有什么区别?它们可以一起使用吗?它们应该一起使用吗?或者其中一个是否足够?


#1 热门回答(135 赞)

  • @Basic表示要保留属性并使用标准映射。它有一些参数,允许你指定属性是否被延迟加载以及它是否可以为空。
  • @Column允许你指定要将属性保留到的数据库中的列的名称。

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

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

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

如果我们需要默认的非惰性行为,那么只需91105085就足够了。


#2 热门回答(46 赞)

除了@djna's answer之外,值得注意的是@Basic应与@OneToMany,@ManyToOne@ManyToMany进行比较。在任何属性中只能指定其中一个。

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

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


#3 热门回答(19 赞)

值得注意的是,Basic是为原始字段设计的
http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes>基本属性是属性类是简单类型(如String,Number,Date或基元)的属性。基本属性的值可以直接映射到数据库中的列值。支持的类型和转换取决于JPA实现和数据库平台。使用不直接映射到数据库类型的类型的任何基本属性都可以序列化为二进制数据库类型。在JPA中映射基本属性的最简单方法是什么都不做。任何没有其他注释且不引用其他实体的属性都将自动映射为基本属性,如果不是基本类型,甚至可以序列化。该属性的列名将默认为大写,名称与属性名称相同。


原文链接