如何映射Composite-ID(java.lang.IllegalArgumentException:期望IdClass映射)

时间:2019-08-11 15:31:00

标签: java hibernate-mapping

我正在尝试编写使用Hibernate(5.4.3)连接到远程数据库(MariaDB)的Java应用。

表“ RezerwacjeWyposarzenia”包含两个外键作为组合主键。我在构建SessionFactory时遇到问题,因为抛出了异常“ java.lang.IllegalArgumentException:期望IdClass映射”。

这是我的hbm文件的一部分:

 <class name="com.reservateApp.entities.RezerwacjeWyposazeniaEntity" table="rezerwacjeWyposazenia" schema="projekt">
        <composite-id mapped="true" class="com.reservateApp.entities.RezerwacjeWyposazeniaEntityPK">
            <key-property name="wyposarzenieDodatkoweId">
                <column name="wyposarzenieDodatkowe_id" sql-type="int(11)"/>
            </key-property>
            <key-property name="rezerwacjeSalId">
                <column name="rezerwacjeSal_id" sql-type="int(11)"/>
            </key-property>
        </composite-id>
    </class>

这是我的实体类:

@Entity
@Table(name = "rezerwacjeWyposazenia", schema = "projekt")
@IdClass(com.reservateApp.entities.RezerwacjeWyposazeniaEntityPK.class)
public class RezerwacjeWyposazeniaEntity {
    private int wyposarzenieDodatkoweId;
    private int rezerwacjeSalId;

    public RezerwacjeWyposazeniaEntity (int wyposarzenieDodatkoweId, int rezerwacjeSalId) {
        this.wyposarzenieDodatkoweId = wyposarzenieDodatkoweId;
        this.rezerwacjeSalId = rezerwacjeSalId;
    }

    public RezerwacjeWyposazeniaEntity() {

    }

    @Id
    @Column(name = "wyposarzenieDodatkowe_id", nullable = false)
    public int getWyposarzenieDodatkoweId() {
        return wyposarzenieDodatkoweId;
    }

    public void setWyposarzenieDodatkoweId(int wyposarzenieDodatkoweId) {
        this.wyposarzenieDodatkoweId = wyposarzenieDodatkoweId;
    }

    @Id
    @Column(name = "rezerwacjeSal_id", nullable = false)
    public int getRezerwacjeSalId() {
        return rezerwacjeSalId;
    }

    public void setRezerwacjeSalId(int rezerwacjeSalId) {
        this.rezerwacjeSalId = rezerwacjeSalId;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        RezerwacjeWyposazeniaEntity that = (RezerwacjeWyposazeniaEntity) o;
        return wyposarzenieDodatkoweId == that.wyposarzenieDodatkoweId &&
                rezerwacjeSalId == that.rezerwacjeSalId;
    }

    @Override
    public int hashCode() {
        return Objects.hash(wyposarzenieDodatkoweId, rezerwacjeSalId);
    }
}

和密钥类:

public class RezerwacjeWyposazeniaEntityPK implements Serializable {
    private int wyposarzenieDodatkoweId;
    private int rezerwacjeSalId;

    @Column(name = "wyposarzenieDodatkowe_id", nullable = false)
    @Id
    public int getWyposarzenieDodatkoweId() {
        return wyposarzenieDodatkoweId;
    }

    public void setWyposarzenieDodatkoweId(int wyposarzenieDodatkoweId) {
        this.wyposarzenieDodatkoweId = wyposarzenieDodatkoweId;
    }

    @Column(name = "rezerwacjeSal_id", nullable = false)
    @Id
    public int getRezerwacjeSalId() {
        return rezerwacjeSalId;
    }

    public void setRezerwacjeSalId(int rezerwacjeSalId) {
        this.rezerwacjeSalId = rezerwacjeSalId;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        RezerwacjeWyposazeniaEntityPK that = (RezerwacjeWyposazeniaEntityPK) o;
        return wyposarzenieDodatkoweId == that.wyposarzenieDodatkoweId &&
                rezerwacjeSalId == that.rezerwacjeSalId;
    }

    @Override
    public int hashCode() {
        return Objects.hash(wyposarzenieDodatkoweId, rezerwacjeSalId);
    }
}

建立SessionFactory:

StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
Metadata metadata = new MetadataSources(standardRegistry).getMetadataBuilder().build();
factory = metadata.getSessionFactoryBuilder().build();

在构建SessionFactory时得到:“ java.lang.IllegalArgumentException:期望IdClass映射”。

0 个答案:

没有答案