Java 提供的id的类型不正确hibernate

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

我得到一个错误:

org.hibernate.typemischException:为类Benty提供了错误类型的id。期望值:班本提,获得班本提

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>