【发布时间】:2010-11-25 21:01:16
【问题描述】:
JPA 中的@Column 和@Basic 注释有什么区别?它们可以一起使用吗? 应该它们一起使用吗?或者其中一个就足够了?
【问题讨论】:
标签: java jpa persistence
JPA 中的@Column 和@Basic 注释有什么区别?它们可以一起使用吗? 应该它们一起使用吗?或者其中一个就足够了?
【问题讨论】:
标签: java jpa persistence
@Basic 表示要保留属性并使用标准映射。它具有允许您指定属性是否延迟加载以及是否可以为空的参数。
@Column 允许您指定数据库中要保留属性的列的名称。
如果您指定一个而不指定另一个,那么您会得到合理的默认行为,因此除了特殊情况外,人们通常只使用一个。
因此,如果我们想要延迟加载属性并指定列名,我们可以说
@Basic(fetch=FetchType.LAZY)
@Column(name="WIBBLE")
如果我们需要默认的非惰性行为,那么只需 @Column 就足够了。
【讨论】:
@Column 的情况下使用@Basic,这就是optional 和nullable 属性同时存在的原因。我说的对吗?
除了@djna's answer,值得注意的是@Basic应该与@OneToMany、@ManyToOne和@ManyToMany进行比较。在任何属性上只能指定其中一个。
@Column 和 @JoinColumn 可以与其中任何一个一起指定以描述数据库列属性。
这是两组可以一起使用的注解,但每组一次只能使用一个注解。
【讨论】:
值得注意的是,Basic 是为原始字段设计的
http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes
基本属性是一种属性类是简单类型的属性,例如字符串、数字、日期或原始类型。基本属性的值可以直接映射到数据库中的列值。
支持的类型和转换取决于 JPA 实现和数据库平台。任何使用不直接映射到数据库类型的类型的基本属性都可以序列化为二进制数据库类型。
在 JPA 中映射基本属性的最简单方法是什么都不做。任何没有其他注释且不引用其他实体的属性将被自动映射为基本类型,如果不是基本类型,甚至会被序列化。属性的列名将被默认,命名与属性名相同,为大写。
【讨论】:
@Basic 注释应用于 JPA 实体,@Column 的注释应用于数据库列 @Basic 注解的可选属性定义了实体字段是否可以为空;另一方面,
【讨论】: