@AttributeOverride是什么意思?

我现在正在(回到)加快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

哦,我从Rubinger&Burke的O’Reilly的Enterprise JavaBeans 3.1中提取了这个例子。

在此先感谢您提供的任何帮助。

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

AttributeOverride来

在UserDetails类中,我使用Address覆盖了homeAddressofficeAddress

这一个地址POJO将在DB中用于两个表。

D B:

 Table1 Table2 STREET_NAME HOME_STREET_NAME CITY_NAME HOME_CITY_NAME STATE_NAME HOME_STATE_NAME PIN_CODE HOME_PIN_CODE 

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

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

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

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

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

请参阅Hibernate Annotations文档中的“2.2.2.4。嵌入式对象(也称为组件)” 。

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

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