@AttributeOverride是什么意思?

时间:2010-12-13 19:36:00

标签: java jpa attributes overrides

我目前正在接受(返回)使用EJB的速度,当我离开时,它发生了巨大的变化(到目前为止更好)。然而,我遇到了一个我正在努力的概念,并希望更好地理解,因为它似乎在我们(我工作的地方,而不是我和我头脑中的所有声音)中使用了相当多的代码。

这是我在一本书中找到的例子。它是显示如何使用@EmbeddedId注释的示例的一部分:

@Entity
public class Employee implements java.io.Serializable
{
    @EmbeddedId
    @AttributeOverrides({
        @AttributeOverride(name="lastName", column=@Column(name="LAST_NAME"),
        @AttributeOverride(name="ssn", column=@Column(name="SSN"))
    })

    private EmbeddedEmployeePK pk;

    ...
}

EmbeddedEmployeePK类是一个相当简单的@Embeddable类,它定义了一对@ColumnslastNamessn

哦,我从O'Reilly的Enterprise JavaBeans 3.1中提取了这个例子,由Rubinger&伯克。

提前感谢您提供的任何帮助。

5 个答案:

答案 0 :(得分:39)

它说组成嵌入式id的属性可能已经预定义(通过显式或隐式映射)列名。通过使用@AttributeOverride,您可以“忽略关于存储在哪个列中的其他信息,并使用我在此处指定的信息”。

答案 1 :(得分:26)

AttributeOverride

在UserDetails类中,我覆盖了homeAddress& officeAddressAddress

。{

这一个地址POJO将代表DB中的两个表。

<强> DB:

Table1      Table2
STREET_NAME HOME_STREET_NAME
CITY_NAME   HOME_CITY_NAME
STATE_NAME  HOME_STATE_NAME
PIN_CODE    HOME_PIN_CODE

答案 2 :(得分:8)

  

EmbeddedEmployeePK类是一个相当简单的@Embeddable类,它定义了一对@Columns:lastName和ssn。

不完全 - EmbeddedEmployeePK定义了一对属性,然后映射到列。 @AttributeOverride注释允许您覆盖嵌入类的属性映射到的列。

这种情况的用例是当嵌入类用于其列名不同的不同情况时,需要一些机制来更改这些列映射。例如,假设您有一个实体,其中包含两个相同嵌入的单独实例 - 它们不能同时映射到相同的列名称。

答案 3 :(得分:1)

您还可以覆盖其他列属性(不仅仅是名称) 假设您要根据嵌入组件的人员更改SSN的长度。您可以为列定义@AttributeOverride,如下所示:

@AttributeOverrides({
    @AttributeOverride(name = "ssn", column = @Column(name = "SSN", length = 11))
})
private EmbeddedEmployeePK pk;

请参阅Hibernate Annotations文档中的"2.2.2.4. Embedded objects (aka components)"

为了保留其他@Column属性(例如namenullable),请将它们保留在已覆盖的列上,与原始列中指定的相同。

答案 4 :(得分:0)

JPA尝试将字段名称映射到数据源中的列名称,因此您在此处看到的是字段变量名称与数据库中列名称之间的转换。

相关问题