我的情况是我有一些遗产表。
资产,具有复合PK(assetId,fiscalId,recordType)
AssetSystems,具有复合PK(assetId,fiscalId,systemId)
他们有关系
资产1 - 1 AssetSystems
其中,Systems 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 class com.wb.adapter.model.AssetSystem。预期:上课 com.wb.adapter.model.AssetSystemKey,上课了 com.wb.adapter.model.AssetKey at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:274)at at com.wb.adapter.main.AssetDbReader.readDB(AssetDbReader.java:47)at at com.wb.adapter.main.AssetDbReader.main(AssetDbReader.java:30)导致 by: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(assetID,fiscalPeriodID)的 com.wb.adapter.model.AssetSystem.asset引用 com.wb.adapter.model.Asset未映射到单个属性
我是JPA的新手,不知道我做错了什么。此外,是否有更好的方法来模拟JPA中的上述表格,这实际上将解决此问题。
非常感谢提前。
萨赫勒
答案 0 :(得分:0)
尝试用@JoinColumns替换@PrimaryKeyJoinColumns,并为资产参考添加@MapsId(“compositeKey”)。