首页 > 解决方案 > 使用 EmbeddedId 休眠 OneToOne

问题描述

尝试合并分离实体时抛出“TypeMismatchException:提供了错误类型的 id”错误。如果对象没有分离,它就可以工作。如果 id 不是 @EmbeddedId,它也可以工作。

可以在此处找到示例存储库https://github.com/joes-code/hibernate-map

// Asset.java
@Entity
@Table(name = "asset")
public class Asset {
    @EmbeddedId
    private AssetId id;

    @Column(name = "asset_cost"
    private BigDecimal price;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "asset_id", referencedColumnName = "asset_id", nullable = false, insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
    private AssetDetail assetDetail;
}

// AssetId.java
@Embeddable
public class AssetId {
    @Column(name = "asset_id", nullable = false)
    private Integer assetId;
}

// AssetDetail.java
@Entity
@Table(name = "asset_detail")
public class AssetDetail {
    @EmbeddedId
    private AssetDetailId id;

    @Column(name = "description", length = 35)
    private String description;
}

// AssetDetailId.java
@Embeddable
public class AssetDetailId {
    @Column(name = "asset_id", nullable = false)
    private Integer assetId;
}

我正在使用 Hibernate 5.4.3.Final

任何想法我做错了什么?似乎 Hibernate 假设 Asset 和 AssetDetail 共享相同的 Id 类?

标签: javahibernate

解决方案


推荐阅读