Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @AttributeOverride是什么意思?_Java_Jpa_Attributes_Overriding - Fatal编程技术网

Java @AttributeOverride是什么意思?

Java @AttributeOverride是什么意思?,java,jpa,attributes,overriding,Java,Jpa,Attributes,Overriding,我现在正在(回来)加快EJB的速度,当我不在的时候,它发生了巨大的变化(到目前为止更好)。然而,我遇到了一个我正在努力解决的概念,我想更好地理解它,因为它似乎在我们(我工作的地方,而不是我和我头脑中的所有声音)的代码中使用了很多 这是我在一本书中找到的一个例子。这是演示如何使用@EmbeddedId注释的示例的一部分: @Entity public class Employee implements java.io.Serializable { @EmbeddedId @Attr

我现在正在(回来)加快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
类是一个相当简单的
@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)如果必须编辑,则必须再次上载图像:/