提供了错误类型hibernate的id
我收到错误:
org.hibernate.TypeMismatchException:为类BEntity提供了错误类型的id。 预期:class级BEntity,获得class级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代码
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资源管理器中运行代码时,它只能在代码中运行它导致问题…
看起来这是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; }
希望这有助于某人。 我遇到了同样的问题。 尽管有相同的领域,我还有两个独立的PK课程。 因此删除了一个PK并且只在所有者和子实体中使用了一个PK。
解决了。
我有同样的问题。
开始的情况
主表上的主键
详细信息表上的主键
修复后我更改了详细信息表composite-id的类,我设置了主表的类,如下所示:
之后有必要(如果你有不同的名字)在你的主键类(在我的例子中是E1Id)中添加属性tid(使用getter和setter方法)
- @OneToOne(可选= false)和@JoinColumn(nullable = false)一起使用
- Jersey和spring集成 – bean Injections在运行时为null
- Spring可以评估SpEL表达式中的所有字符/表达式,因为它们是从属性文件中注入的吗?
- 基于注释的ServiceLocatorFactoryBean?
- 有没有办法让javadoc工具记录注释?
- 如果我在配置类上使用@ActiveProfiles注释而不是在定义我的bean的类上使用它,那么在Spring中会发生什么?
- Hibernate / JPA注释 – 未知实体
- :: 0处的错误无法找到引用的切入点注释
- 外行人的术语中的春季传播例子