我有一些遗留表的情况。
资产,具有复合主键(assetId、会计 ID、记录类型)
AssetSystems,具有复合主键(资产 ID、财务 ID、系统 ID)
他们有关系。
资产 1 - 1 AssetSystems
其中,系统 FK (assetId, financeId)
这是我的代码。
资产.java
@Entity
@Table(name="Assets")
public class Asset implements Serializable {
@EmbeddedId
private AssetKey compositeKey;
@OneToOne(fetch=FetchType.LAZY, mappedBy="asset")
private AssetSystem assetSystem;
// other fields and setters - getters
}
资产密钥.java
@Embeddable
public class AssetKey implements java.io.Serializable {
@Column(name="assetID")
private String assetID;
@Column(name="fiscalPeriodID")
private BigInteger fiscalPeriodID;
@Column(name="recordType")
private String recordType;
// setter - getter
}
资产系统.java
@Entity
@Table(name="AssetSystems")
public class AssetSystem implements Serializable {
@EmbeddedId
private AssetSystemKey compositeKey;
@OneToOne
@PrimaryKeyJoinColumns({
@PrimaryKeyJoinColumn(name="assetID", referencedColumnName="assetID"),
@PrimaryKeyJoinColumn(name="fiscalPeriodID", referencedColumnName="fiscalPeriodID")
})
private Asset asset;
// other fields and setter - getter
}
资产系统密钥.java
@Embeddable
public class AssetSystemKey implements Serializable {
@Column(name="assetID")
private String assetID;
@Column(name="fiscalPeriodID")
private BigInteger fiscalPeriodID;
@Column(name="systemID")
private BigInteger systemID;
// setter - getter
}
当我尝试访问数据库时,我得到了这个异常
java.lang.IllegalArgumentException:org.hibernate.TypeMismatchException:为类 com.wb.adapter.model.AssetSystem 提供了错误类型的 id。预期:com.wb.adapter.model.AssetSystemKey 类,在 com.wb.adapter.main 的 org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:274) 中获得了类 com.wb.adapter.model.AssetKey。 AssetDbReader.readDB(AssetDbReader.java:47) at com.wb.adapter.main.AssetDbReader.main(AssetDbReader.java:30) 原因:org.hibernate.TypeMismatchException:为类 com.wb 提供了错误类型的 id。适配器.模型.资产系统。预期:com.wb.adapter.model.AssetSystemKey 类,得到 com.wb.adapter.model.AssetKey 类
我还尝试用简单的JoinColumn替换PrimaryKeyJoinColumns ,这会导致此异常。
引起:org.hibernate.AnnotationException:com.wb.adapter.model.AssetSystem.asset 的referencedColumnNames(assetID, financePeriodID) 引用com.wb.adapter.model.Asset 未映射到单个属性
我是 JPA 的新手,不确定我做错了什么。此外,是否有更好的方法在 JPA 中对上述表格进行建模,这实际上可以解决这个问题。
提前谢谢了。
萨希尔