gpt4 book ai didi

hibernate - 在 hibernate 中使用两个字段作为唯一 ID

转载 作者:行者123 更新时间:2023-12-04 05:47:59 25 4
gpt4 key购买 nike

我有一个实体类,它使用它的两个字段作为主键(一起)。这是我正在尝试的。我已经有了数据库,所以我不能停止遵循这条路径并创建一个主键。

 @Entity
public class Account {
private String description;
private AccountPk id;

public Account (String description) {
this.description = description;
}

protected Account() {
}

@EmbeddedId
public AccountPk getId() {
return this.id;
}
public String getDescription() {
return this.description;
}
public void setId(AccountPk id) {
this.id = id;
}
public void setDescription(String description) {
this.description = description;
}
}

然后我有另一个支持类
    public class AccountPk {
private String code;
private Integer number;
public AccountPk() {
}

public String getCode() {
return this.code;
}
public Integer getNumber() {
return this.number;
}

public void setNumber(Integer number) {
this.number = number;
}

public void setCode(String code) {
this.code = code;
}

public int hashCode() {
int hashCode = 0;
if( code != null ) hashCode ^= code.hashCode();
if( number != null ) hashCode ^= number.hashCode();
return hashCode;
}

public boolean equals(Object obj) {
if( !(obj instanceof AccountPk) ) return false;
AccountPk target = (AccountPk)obj;
return ((this.code == null) ?
(target.code == null) :
this.code.equals(target.code))
&& ((this.number == null) ?
(target.number == null) :
this.number.equals(target.number));
}
}

我遇到的问题是映射器类, 账户.hbm.xml 看起来像
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class
name="hello.Account"
table="MESSAGES">
<id
name="id"
column="MESSAGE_ID">
<generator class="increment"/>
</id>
<property
name="description"
column="DESCRIPTION"/>
</class>
</hibernate-mapping>

我确信这个 xml 文件是罪魁祸首,但我不知道如何以正确的方式做到这一点。所以,我会感谢你在这方面的帮助。

最佳答案

使用 <composite-id>而不是 <id> ,例如像这样:

<composite-id>
<key-property name="firstId" column="FIRST_ID_COL" type="..." />
<key-property name="secondId" column="SECOND_ID_COL" type="..." />
</composite-id>

顺便说一句,您不能使用具有复合 ID 的生成器。您必须自己生成 ID。 (无论如何,复合键的生成器通常没有意义。它应该生成哪些关键组件以及何时生成?)

关于hibernate - 在 hibernate 中使用两个字段作为唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10429939/

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