Java 持久性/JPA:@Column 与 @Basic

Posted

技术标签:

【中文标题】Java 持久性/JPA:@Column 与 @Basic【英文标题】:Java Persistence / JPA: @Column vs @Basic 【发布时间】:2010-11-25 21:01:16 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

如果您指定一个而不指定另一个,那么您会得到合理的默认行为,因此除了特殊情况外,人们通常只使用一个。

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

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

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

【讨论】:

这是一个明确的答案。谢谢你。所以我假设一个人可以在没有@Column 的情况下使用@Basic,这就是optionalnullable 属性同时存在的原因。我说的对吗? 我并没有声称完全理解 JPA 规范中关于 @Basic 的可为空值和 @Column 的可为空值之间的差异以及不指定任何一个或两个指定的效果。 @Basic nullable 被描述为与模式生成相关的“提示”。 @Column nullable 被描述为定义数据库中列的特征。我的做法是使用 @Column 案例。 @Basic(optional) 在保存到数据库之前(应该)由持久性提供程序在运行时检查。 @Column 是数据库中的列定义,用于模式生成:***.com/questions/2899073/… 那个“非懒惰”的人,叫 EAGER。哈哈 JPA 注释可以分为两组:纯关系注释与实现注释。纯关系注释包含:Entity、Basic、OneToOne、OneToMany、ManyToMany……而实现注释提供了有关如何将纯理论模型映射到真实数据库的线索:表、列……在您的问题“基本”中' 是一个注释,用于提供有关关系实体属性的信息,而 'Column' 提供有关如何将其映射到数据库列的信息。【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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

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

基本属性是一种属性类是简单类型的属性,例如字符串、数字、日期或原始类型。基本属性的值可以直接映射到数据库中的列值。

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

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

【讨论】:

否,如果未指定列注释,则应用默认值(名称将是属性一)。【参考方案4】:

@Basic 注释应用于 JPA 实体,@Column 的注释应用于数据库列 @Basic 注解的可选属性定义了实体字段是否可以为空;另一方面,

@Column注解的可空属性指定对应的数据库列是否可以为空 我们可以使用@Basic 来指示一个字段应该被延迟加载 @Column 注解允许我们指定映射的数据库列的名称 @Basic 注释将该属性标记为在 Java 对象级别上不是可选的。并且 (nullable = false) 对列映射,只负责生成一个 NOT NULL 数据库约束。

【讨论】:

以上是关于Java 持久性/JPA:@Column 与 @Basic的主要内容,如果未能解决你的问题,请参考以下文章

JPA与同一实体的两个单向@OneToMany关系导致重复输入

使用 JPA 在 PostgreSQL 中持久化 UUID

如何使用休眠将mysql与Java连接?例外:没有名为 org.hibernate.tutorial_jpa 的 EntityManager 的持久性提供程序 [关闭]

持久收集 JPA

JPA与EJB3的关系

jpa与data jpa联系