gpt4 book ai didi

java - hibernate 组合键

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:27:23 27 4
gpt4 key购买 nike

是否有必要将 composite-id 映射到类??

可以这样吗?

<composite-id>
<key-property=..../>
<key-property=..../>
</composite-id>

或者应该是

<composite-id class=....>
<key-property=..../>
<key-property=..../>
</composite-id>

如果我们有复合键,那么该类是否应该实现 equals()override() 方法?

最佳答案

Hibernate 需要能够比较和序列化标识符。因此,标识符类必须是可序列化的,并且要与数据库的复合键相等性概念一致地覆盖 hashCode() 和 equals() 。

如果您将复合 ID 映射为实体的属性,则实体本身就是标识符。

第二种方法称为映射复合标识符,其中在 元素内命名的标识符属性在持久类和单独的标识符类上都是重复的

最后,一个 composite-id 可能是一个组件类。在这种情况下,组件类是标识符类。

请注意,强烈建议将 ID 作为一个单独的类。否则,您将只能通过非常笨拙的方式使用 session.get() 或 session.load() 来查找您的对象。

引用文档的相关部分:

在这个例子中,复合标识被映射为实体的属性。 (以下假设您正在定义 Employee 类)。

<composite-id>
<key-property name="EmployeeNumber"/>
<key-property name="Dependent"/>
</composite-id>

class EmployeeAssignment implements Serializable
{
string getEmployeeNumber()
void setEmployeeNumber( string value )
string getDepartment()
void setDepartment( string value )
boolean equals( Object obj )
int hashCode()
}

映射的复合 ID:

<composite-id class="EmployeeAssignmentId" mapped="true">
<key-property name="EmployeeNumber"/>
<key-property name="Dependent"/>
</composite-id>

class EmployeeAssignment
{
string getEmployeeNumber()
void setEmployeeNumber( string value )
string getDepartment()
void setDepartment( string value )
}

class EmployeeAssignmentId implements Serializable
{
string getEmployeeNumber()
void setEmployeeNumber( string value )
string getDepartment()
void setDepartment( string value )
boolean equals( Object obj )
int hashCode()
}

作为复合 ID 的组件:

<composite-id name="Id" class="EmployeeAssignmentId">
<key-property name="EmployeeNumber"/>
<key-property name="Dependent"/>
</composite-id>

class EmployeeAssignment
{
EmployeeAssignmentId getId()
void setId( EmployeeAssignmentId value )
}

class EmployeeAssignmentId implements Serializable
{
string getEmployeeNumber()
void setEmployeeNumber( string value )
string getDepartment()
void setDepartment( string value )
boolean equals( Object obj )
int hashCode()
}

关于java - hibernate 组合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2301259/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com