当前位置: 首页 > 面试题库 >

Java-JPA @Basic和@Embedded批注

颜文康
2023-03-14
问题内容

我正在从本教程中学习JPA 。

我在理解以下注释时有些困惑:

  • @Basic
  • @Embedded

可嵌入类型的字段默认为持久性,就像用@Embedded注释一样。

如果可嵌入类型的字段默认为持久性,那么为什么我们需要@Embedded注释


问题答案:

@Embeddable注解允许指定一个类,其实例存储为拥有实体的固有部分。此注释 没有属性

@Embeddable
public class EmploymentPeriod {
     java.util.Date startDate;
     java.util.Date endDate;
     ...
}

@Embedded注释用于指定其值是一个可嵌入类的实例实体的持久字段或属性。默认情况下,@Embeddable类中指定的列定义适用于拥有实体的表,但是
您可以 使用@AttributeOverride以下 方法覆盖它们

@Embedded
@AttributeOverrides({
    @AttributeOverride(name="startDate", column=@Column(name="EMP_START")),
    @AttributeOverride(name="endDate", column=@Column(name="EMP_END"))
})
public EmploymentPeriod getEmploymentPeriod() { ... }

关于可选@Basic注释,您可以使用它来将获取类型配置为,LAZY并配置映射以禁止带有optional属性的空值(对于非基本类型)。

@Basic(fetch=LAZY)
protected String getName() { return name; }

您也可以将其放在字段或属性上以将其明确标记为持久性(出于文档目的)。



 类似资料:
  • 问题内容: 批注在JPA中如何工作? 我找到了各种答案,摘录如下: JPA使用实体中的版本字段来检测对同一数据存储记录的并发修改。当JPA运行时检测到尝试同时修改同一记录的尝试时,它将向尝试最后提交的事务抛出异常。 但是我仍然不确定它是如何工作的。 同样从以下几行开始: 您应该考虑版本字段是不变的。更改字段值会产生不确定的结果。 这是否意味着我们应该将version字段声明为? 问题答案: 但是我

  • 问题内容: JPA中的和批注有什么区别?它们可以一起使用吗? 如果 他们可以一起使用吗?还是其中之一就足够了? 问题答案: 表示要保留属性,并且要使用标准映射。它具有允许您指定是否要延迟加载属性以及该属性是否为空的参数。 允许您指定数据库中属性要保留到的列的名称。 如果您指定一个不带另一个,那么您将获得明智的默认行为,因此,除了特殊情况外,通常人们只使用一个。 因此,如果我们想要延迟加载属性并指定

  • Java Embedded Python (Jepp) embeds CPython in Java.

  • 问题内容: 我试图 忽略 了注释,并且仍然领域已经嵌入在表中。我找不到任何能说明注解是可选的内容。 是 还是 不是 可选的? 以下代码 生成始终相同的表 即使我 没有 指定。 我的配置: JBoss EAP 6.4.0 hibernate-jpa-2.0-api-1.0.1.Final-redhat-3.jar JPA规范说: http://docs.oracle.com/javaee/7/api

  • 我尝试省略注释,但这些字段仍然被嵌入到表中。我找不到任何东西表明注释是可选的。 我的配置: JBoss EAP 6.4.0 hibernate-jpa-2.0-api-1.0.1.final-redhat-3.jar JPA规范规定: 指定一个类,其实例存储为所属实体的固有部分,并共享该实体的标识。嵌入对象的每个持久属性或字段都映射到实体的数据库表。

  • The embedded component removes fullscreen CSS styles from A-Frame’s <canvas>element, making it easier to embed within the layout of an existing webpage. Embedding removes the default fixed positioning