Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java持久性/JPA:@Column vs@Basic_Java_Jpa_Persistence - Fatal编程技术网

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

Java持久性/JPA:@Column vs@Basic,java,jpa,persistence,Java,Jpa,Persistence,JPA中的@Column和@Basic注释有什么区别?它们可以一起使用吗?它们应该一起使用吗?或者其中一个就够了吗? @Basic表示要持久化属性并使用标准映射。它有一些参数,允许您指定是否延迟加载属性以及属性是否可为空 @Column允许您在数据库中指定属性要保留到的列的名称 如果您指定一个而不指定另一个,那么您将获得默认行为,这是合理的,因此人们通常只使用一个,特殊情况除外 因此,如果我们想要延迟加载属性并指定列名,我们可以说 @Basic(fetch=FetchType.LAZY)

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

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

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

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

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

 @Basic(fetch=FetchType.LAZY)
 @Column(name="WIBBLE")
如果我们需要默认的非懒惰行为,那么只需
@列就足够了。

此外,值得注意的是
@Basic
应该与
@OneToMany
@ManyToOne
@manytomy
进行比较。在任何属性上只能指定其中一个

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


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

值得注意的是,Basic是为基本字段设计的

基本属性是属性类为简单类型(如字符串、数字、日期或基元)的属性。基本属性的值可以直接映射到数据库中的列值

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

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


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

  • @列批注的nullable属性指定相应的数据库列是否可以为null
  • 我们可以使用@Basic来指示应该延迟加载字段
  • @Column注释允许我们指定映射数据库列的名称
  • @基本注释在Java对象级别上将属性标记为非可选。列映射上的And(nullable=false)只负责生成NOTNULL数据库约束

这是一个明确的答案。非常感谢。因此,我假设可以使用
@Basic
而不使用
@Column
,这就是为什么
可选
可空
属性都存在于这两个属性中的原因。我说的对吗?我并不完全理解JPA规范中@Basic的nullable和@Column的nullable之间的区别,以及两者都不指定的效果@基本nullable被描述为与模式生成相关的“提示”@列nullable被描述为定义数据库中列的特征。我的做法是使用@Column case@Basic(可选)在保存到DB之前,由持久性提供程序在运行时检查@Column是数据库中的一个列定义,用于生成模式:“非惰性”调用EAGER。JPA注释可以分为两组:纯关系注释和实现注释。纯关系注释包含:实体、基本、OneToOne、OneToMany、ManyToMany。。。而实现注释提供了如何将纯理论模型映射到真实数据库的线索:表、列。。。在您的问题中,“Basic”是一个注释,用于提供有关关系实体属性的信息,而“Column”则提供有关如何将其映射到数据库列的信息。否,如果未指定列注释,则应用默认值(名称将是属性名称)。