Java 提供的id的类型不正确hibernate
我得到一个错误: org.hibernate.typemischException:为类Benty提供了错误类型的id。期望值:班本提,获得班本提Java 提供的id的类型不正确hibernate,java,hibernate,annotations,type-mismatch,Java,Hibernate,Annotations,Type Mismatch,我得到一个错误: org.hibernate.typemischException:为类Benty提供了错误类型的id。期望值:班本提,获得班本提 public class BEntity implements Serializable{ @Id @Column(name = "NUM") private String num; @Id @Column(name = "INIT") private String init; @Colum
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查询:
休眠发电机代码
当我在SQL资源管理器中运行代码时,它只在代码中运行它,导致问题…看起来这是hibernate版本3.2.6中的一个缺陷,尚未解决。我遇到了这个 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;
}
我也有同样的问题 开始情况 主表上的主键
详细信息表上的主键
修理后
我更改了明细表复合id的类,并将主表的类设置为:
<composite-id name="id" class="model.E1Id">
<key-property name="tid" type="int">
<column name="tID" />
</key-property>
<key-property name="year" type="int">
<column name="Year" />
</key-property>
</composite-id>
之后,有必要(如果您有不同的名称)在primarykey类(在我的例子中是E1Id)中添加属性tid(使用getter和setter方法)我也遇到了同样的问题。我有两个单独的PK类,它们有相同的字段。所以我删除了一个PK,只在所有者和子实体中使用了一个PK。这解决了问题。您使用的是哪个Hibernate版本?您是使用core还是JPA?在这里用JPA+Hibernate4.1.3进行了测试,结果很好(没有错误)。您确定错误是在select上还是在代码的另一部分?是否使用hibernate 4.1.2 Core?您是否确实尝试过解决方案?我刚刚得到“com.sun.istack.SAXException2:在对象图中检测到一个循环。这将导致无限深的XML”,但在我的例子中,OneToOne关系是双向的。你为什么用@Id而不是@EmbeddedId?投票吧!有同样的错误,是因为这个。即使pk的类被标记为@embeddeble,也有两个类具有相同的字段。
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;
}
<composite-id name="id" class="model.E1Id">
<key-property name="taxpayerId" type="int">
<column name="TaxpayerID" />
</key-property>
<key-property name="year" type="int">
<column name="Year" />
</key-property>
</composite-id>
<composite-id name="id" class="model.E1dataFromTaxPayerFolderId">
<key-property name="tid" type="int">
<column name="tID" />
</key-property>
<key-property name="year" type="int">
<column name="Year" />
</key-property>
</composite-id>
<composite-id name="id" class="model.E1Id">
<key-property name="tid" type="int">
<column name="tID" />
</key-property>
<key-property name="year" type="int">
<column name="Year" />
</key-property>
</composite-id>