gpt4 book ai didi

java - 提供了错误类型的 id hibernate

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

我遇到错误:

org.hibernate.TypeMismatchException:为类 BEntity 提供了错误类型的 ID。预期:类 BEntity,得到类 AEntity

public class BEntity implements Serializable{
@Id
@Column(name = "NUM")
private String num;

@Id
@Column(name = "INIT")
private String init;

@Column(name = "V_CNT")
private Integer vcnt;

//{{{some column omitted}}}//
}

public class AEntity implements Serializable{

@Id
@Column(name = "NUM")
private String num;

@Id
@Column(name = "INIT")
private String init;

@OneToOne
@PrimaryKeyJoinColumns({
@PrimaryKeyJoinColumn(name="NUM", referencedColumnName="NUM"),
@PrimaryKeyJoinColumn(name="INIT", referencedColumnName="INIT")
})
private BEntity bEntity;
}

HQL 查询:

String queryString = "FROM AEntity AS A " +
"LEFT JOIN A.bEntityAS B " +
"WHERE A.INIT||A.NUM IN (:carList) AND A.INIT IN (:initList) AND A.NUM IN (:numberList) " +
"AND B.TRUK_AXL_CNT > 0";

Hibernate gen-code

select aentity0_.NUMBER as NUMBER4_0_, aentity0_.INITIAL as INITIAL4_0_, bentity_p1_.NUMBER as NUMBER5_1_, bentity_p1_.INITIAL as INITIAL5_1_, aentity0_.V_CNT as VCNT3_4_0_, aentity0_.EIN as EIN4_0_, aentity0_.TYP as TYP5_4_0_, aentity0_.TRUK_CNT as TRUK6_4_0_, bentity_p1_.TRUK_AXL_CNT as TRUK3_5_1_ from USR.aentity aentity0_ left outer join USR.bentity_PRIMARY bentity_p1_ on aentity0_.NUMBER=bentity_p1_.NUMBER and aentity0_.INITIAL=bentity_p1_.INITIAL 
where (aentity0_.INITIAL||aentity0_.NUMBER in (?,?,?))
and (aentity0_.INITIAL in (?,?,?))
and (aentity0_.NUMBER in (?, ?, ?))
and bentity_p1_.TRUK_AXL_CNT>0

当我在 SQL Explorer 中运行代码时,它只能在代码中运行导致问题...

最佳答案

看起来这是 hibernate 版本 3.2.6 中的一个缺陷,目前仍未解决。遇到这个JIRA .

Hibernate 支持具有多个 @Id,但在一对一映射下似乎失败了,建议的解决方法是使用单个 CompositeKey,这意味着您创建一个 PK 类

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Embeddable;

@Embeddable
public class PKClass implements Serializable {

@Column(name = "NUM")
private String num;

@Column(name = "INIT")
private String init;

//gettter setter here

}

然后在您的实体中使用它作为 ID

public class BEntity implements Serializable{

@Id
private PKClass pkClass = null;

@Column(name = "V_CNT")
private Integer vcnt;

//{{{some column omitted}}}//
}

public class AEntity implements Serializable{

@Id
private PKClass pkClass = null;

@OneToOne
@PrimaryKeyJoinColumns({
@PrimaryKeyJoinColumn(name="NUM", referencedColumnName="NUM"),
@PrimaryKeyJoinColumn(name="INIT", referencedColumnName="INIT")
})
private BEntity bEntity;
}

关于java - 提供了错误类型的 id hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10805004/

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