Java @AttributeOverride是什么意思?
我现在正在(回来)加快EJB的速度,当我不在的时候,它发生了巨大的变化(到目前为止更好)。然而,我遇到了一个我正在努力解决的概念,我想更好地理解它,因为它似乎在我们(我工作的地方,而不是我和我头脑中的所有声音)的代码中使用了很多 这是我在一本书中找到的一个例子。这是演示如何使用Java @AttributeOverride是什么意思?,java,jpa,attributes,overriding,Java,Jpa,Attributes,Overriding,我现在正在(回来)加快EJB的速度,当我不在的时候,它发生了巨大的变化(到目前为止更好)。然而,我遇到了一个我正在努力解决的概念,我想更好地理解它,因为它似乎在我们(我工作的地方,而不是我和我头脑中的所有声音)的代码中使用了很多 这是我在一本书中找到的一个例子。这是演示如何使用@EmbeddedId注释的示例的一部分: @Entity public class Employee implements java.io.Serializable { @EmbeddedId @Attr
@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
类是一个相当简单的@Embedded
类,它定义了一对@列
:lastName
和ssn
哦,我从Rubinger&Burke的O'Reilly的EnterpriseJavaBeans 3.1中举出了这个例子
提前谢谢你能给我的任何帮助
EmbeddedEmployeePK类是一个相当简单的@Embedded类,它定义了一对@Columns:lastName和ssn
不完全-EmbeddedEmployeePK
定义了一对属性,然后映射到列。@AttributeOverride
注释允许您覆盖嵌入类的属性映射到的列
这种情况的用例是当可嵌入类在其列名不同的不同情况下使用时,需要某种机制来允许您更改这些列映射。例如,假设您有一个实体,其中包含同一个可嵌入对象的两个独立实例—它们不能同时映射到相同的列名。这意味着组成嵌入id的属性可能具有预定义的(通过显式或隐式映射)列名。通过使用
@AttributeOverride
你说的是“忽略关于它存储在哪个列的其他信息,并使用我在这里指定的信息”。JPA尝试将字段名映射到数据源中的列名,因此,您在这里看到的是字段变量名称与数据库中列名称之间的转换。
在UserDetails类中,我用地址
覆盖了家庭地址
和办公地址
这一个地址POJO将代表数据库中的两个表
DB:
Table1 Table2
STREET_NAME HOME_STREET_NAME
CITY_NAME HOME_CITY_NAME
STATE_NAME HOME_STATE_NAME
PIN_CODE HOME_PIN_CODE
您还可以覆盖其他列属性(不仅仅是名称)。
假设您希望根据嵌入组件的用户更改SSN的长度。您可以为以下列定义
@AttributeOverride
:
@AttributeOverrides({
@AttributeOverride(name = "ssn", column = @Column(name = "SSN", length = 11))
})
private EmbeddedEmployeePK pk;
请参见Hibernate注释文档中的
为了保留其他
@Column
属性(例如name
和nullable
),请将它们保留在覆盖的列上,与您在原始列上指定的内容相同。好的,这比作者在书中的内容更有意义。多谢!这是一个很好的例子,说明了@AttributeOverride
的威力,但我认为可以用一些简单的解释。不要用图像来显示代码。如果需要编辑,a)有人无法编辑,必须重新键入所有代码;b)如果必须编辑,则必须再次上载图像:/