[英]JPA: Composite Primary and Foreign Keys
我有一些旧表的情况。
具有复合PK(资产ID,财政ID,记录类型)的资产
具有复合PK(资产ID,财政ID,系统ID)的AssetSystems
他们有关系。
资产1-1 AssetSystems
在哪里,系统FK(assetId,countryId)
这是我的代码。
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:为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类。 com.wb.adapter.main.AssetDbReader.main(AssetDbReader.java:30)处的AssetDbReader.readDB(AssetDbReader.java:47)原因:org.hibernate.TypeMismatchException:为com.wb类提供了错误类型的ID。 adapter.model.AssetSystem。 预期:com.wb.adapter.model.AssetSystemKey类,获得com.wb.adapter.model.AssetKey类
我也尝试用简单的JoinColumn替换PrimaryKeyJoinColumns ,这导致此异常。
由以下原因引起:org.hibernate.AnnotationException:com.wb.adapter.model.AssetSystem.asset的com.wb.adapter.model.Asset的referencedColumnNames(assetID,financialPeriodID)未映射到单个属性
我是JPA的新手,不确定自己在做什么错。 此外,是否有更好的方法在JPA中为上述表建模,这实际上将解决此问题。
提前谢谢了。
萨希尔
尝试将@PrimaryKeyJoinColumns替换为@JoinColumns,并添加@MapsId(“ compositeKey”)作为资产参考。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.