我有我有一些遗留表的情况。
资产,复合PK(由assetid,fiscalId,RECORDTYPE)
AssetSystems,复合PK(由assetid,fiscalId,systemId)已JPA:复合主键和外键
而且他们有关系。
资产1 - 1 AssetSystems
其中,系统FK(由assetid,fiscalId)
这里是我的代码。
Asset.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
}
AssetKey.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
}
AssetSystem.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
}
AssetSystemKey.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:错误的类型提供的ID为 类com.wb. adapter.model.AssetSystem。预计:类 com.wb.adapter.model.AssetSystemKey,得到了类 com.wb.adapter.model.AssetKey在 org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:274)在 com.wb. adapter.main.AssetDbReader.readDB(AssetDbReader.java:47)at com.wb.adapter.main.AssetDbReader.main(AssetDbReader.java:30)引起 作者:org.hibernate.TypeMismatchException:提供的错误类型的id用于com.wb.adapter.model.AssetSystem类的 。预计:类 com.wb.adapter.model.AssetSystemKey,得到了类 com.wb.adapter.model.AssetKey
我也试图用简单的JoinColumn导致该更换PrimaryKeyJoinColumns例外。
所致:org.hibernate.AnnotationException: referencedColumnNames com.wb.adapter.model.AssetSystem.asset的(由assetid,fiscalPeriodID)引用 com.wb.adapter.model.Asset未映射到单一属性
我是JPA的新手,不确定我做错了什么。另外,有没有更好的方法来模拟JPA中的上述表格,这将有效解决此问题。
非常感谢提前。
萨赫勒
你有没有发现你的代码有什么问题? – squallsv