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

JPA @Embedded注释是强制性的吗?

萧浩漫
2023-03-14
问题内容

我试图 忽略@Embedded注释,并且仍然领域已经嵌入在表中。我找不到任何能说明@Embedded注解是可选的内容。

还是 不是 可选的?

以下代码

@Embeddable
public class Address {
    String city;
    String street;
}

@Entity
public class Person {
    String name;
    @Embedded // it seems that it works even if this annotation is missing!?
    Address address;
}

生成始终相同的表

person
    name
    city
    street

即使我 没有 指定@Embedded

我的配置

  • 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/javax/persistence/Embedded.html

@javax.persistence.Embedded

指定实体的持久字段或属性,其值是可嵌入类的实例。必须将embeddable类注释为Embeddable。

http://docs.oracle.com/javaee/7/api/javax/persistence/Embeddable.html

@javax.persistence.Embeddable

指定一个类,其实例存储为拥有实体的固有部分并共享该实体的标识。嵌入对象的每个持久属性或字段都映射到该实体的数据库表。


问题答案:

如果使用Hibernate,则注释字段本身(如@Embedded)还是注释引用的类(如@Embeddable)都没有关系。使Hibernate确定类型至少需要两者之一。

在Hibernate文档中有一个(隐式的)声明,请看这里:http : //docs.jboss.org/hibernate/core/3.6/reference/en-
US/html/mapping.html#mapping-
声明组件

它说:

Person实体具有两个组件属性,homeAddress和bornIn。homeAddress属性尚未被注释,但是Hibernate通过在Address类中查找@Embeddable注释将猜测它是一个持久性组件。



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

  • 问题: count属性是必需的&前缀是必需的。如果您看到beanClass2,我将通过构造函数设置属性,在beanClass3中也是如此 但是当我执行代码时,它抛出异常。让我困惑的重要事情是: 2014年12月9日8:47:33 PM org.springframework.beans.factory.support.defaultsingletonbeanregistry destroySing

  • 问题内容: 我正在从本教程中学习JPA 。 我在理解以下注释时有些困惑: 可嵌入类型的字段默认为持久性,就像用@Embedded注释一样。 如果可嵌入类型的字段默认为持久性,那么为什么我们需要注释 问题答案: 该注解允许指定一个类,其实例存储为拥有实体的固有部分。此注释 没有属性 。 该注释用于指定其值是一个可嵌入类的实例实体的持久字段或属性。默认情况下,类中指定的列定义适用于拥有实体的表,但是

  • 问题内容: 嵌入式注释如何影响数据库? SQL查询将如何改变? 使用注释的典型用例是什么? 问题答案: 嵌入式注释如何影响数据库? 它根本不影响它。在ORM提供程序层上,来自嵌入式实体的所有字段都 将 与父实体 合并 ,并像对待它们始终在其中声明一样。换句话说,它的工作方式就好像您将所有字段,获取器和设置器直接复制到包含嵌入式对象的实体中一样。 SQL查询将如何改变? 他们不会。您无需更改任何内容

  • 我有一个spring rest服务,它接受Person对象。Person对象具有名称、电话号码和电子邮件。当添加一个人时,电话号码是强制性的。如果存在电话号码属性,它将使用或或验证是否为空。但是如果属性不存在,验证就不起作用。请建议提供任何验证注释,以检查JSON请求中是否存在该属性。 以下是请求体测试用例 {“name”:“anu”,“phonenumber”:“”,“email”:“test@

  • 我正在阅读使用Spring框架的事务管理。在第一个组合中,我使用Spring Hibernate和Hibernate的API来控制事务(Hibernate API)。接下来,我想使用注释进行测试,它确实起了作用。 我感到困惑的是: > JPA、JTA、Hibernate是否有自己的事务管理方式。举个例子,考虑如果我使用Spring Hibernate,在那种情况下,你会使用“JPA”事务吗? 就像