gpt4 book ai didi

java - @IdClass 与非原始@Id

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

我正在尝试将复合主键添加到类中,但遇到了一些麻烦。这是类。

class User {
private long id;
...
}

class Token {
private User user;
private String series;
...
}

我正在使用 orm.xml 来映射类,因为它们实际上是我不想依赖于 JPA 的更高级别 API 的一部分 - 它有许多实现。

这里是:

...
<entity class="User">
<attributes>
<id name="id">
<generated-value strategy="AUTO"/>
</id>
...
</attributes>
</entity>

<entity class="Token">
<id-class class="TokenPK"/>
<attributes>
<id name="series"/>
<id name="user"/>
<many-to-one name="user"/>
</attributes>
</entity>

最后,为了使一切正常,我创建了 TokenPK 类,它看起来像这样:

public class TokenPK implements Serializable {

private String series;
private User user;

public TokenPK() {
}

public TokenPK(String series, User user) {
this.series = series;
this.user = user;
}

public String getSeries() {
return series;
}

public void setSeries(String series) {
this.series = series;
}

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

RememberMeTokenPK that = (TokenPK) o;

if (!series.equals(that.series)) return false;
if (!user.equals(that.user)) return false;

return true;
}

@Override
public int hashCode() {
int result = series.hashCode();
result = 31 * result + user.hashCode();
return result;
}
}

我遇到的问题是 Hibernate 提示它无法创建 mysql 表,因为“BLOB/TEXT 列‘user’在没有 key 长度的 key 规范中使用”。

我的问题实际上是列首先存储为 BLOB。在我将 id-class 放入其中之前,它工作得很好,用户是通过它的 id 链接的。我怎样才能让 Hibernate 使用用户 ID 的 long 值作为主键?

更新的 orm.xml:

<entity class="Token">
<id-class class="TokenPK"/>
<attributes>
<id name="series"/>
<id name="user">
<column name="userId"/>
</id>
<many-to-one name="user">
<join-column name="userId" insertable="false" updatable="false"/>
</many-to-one>
</attributes>
</entity>

最佳答案

String seriesint userId定义复合键,在Token中为User指定一个join-column id。我认为您还必须添加 insertable="false", updatable="false"。

 <composite-id name="TikenPK" class="yourpackage.TokenPK"> 
<key-property name="series" column="series" type="string" />
<key-property name="userId" column="userId" type="integer"/>
</composite-id>

关于java - @IdClass 与非原始@Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1722577/

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