0

我有一些遗留表的情况。
资产,具有复合主键(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 中对上述表格进行建模,这实际上可以解决这个问题。

提前谢谢了。

萨希尔

4

1 回答 1

0

尝试将 @PrimaryKeyJoinColumns 替换为 @JoinColumns 并添加 @MapsId("compositeKey") 以供资产参考。

于 2013-09-30T08:03:45.937 回答