0

レガシーテーブルがいくつかある状況があります。
複合 PK (assetId、fiscalId、recordType) を持つ資産
複合 PK (assetId、fiscalId、systemId) を持つ AssetSystems

そして、彼らには関係があります。
資産 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
}

DBにアクセスしようとすると、この例外が発生します

java.lang.IllegalArgumentException: org.hibernate.TypeMismatchException: クラス com.wb.adapter.model.AssetSystem に間違ったタイプの ID が提供されました。予想: クラス com.wb.adapter.model.AssetSystemKey、取得したクラス com.wb.adapter.model.AssetKey は com.wb.adapter.main の org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:274) にあります。 com.wb.adapter.main.AssetDbReader.main(AssetDbReader.java:30) の AssetDbReader.readDB(AssetDbReader.java:47) 原因: org.hibernate.TypeMismatchException: クラス com.wb に間違ったタイプの ID が提供されました。アダプター.モデル.アセットシステム. 予想: クラス com.wb.adapter.model.AssetSystemKey、クラス com.wb.adapter.model.AssetKey を取得

また、 PrimaryKeyJoinColumnsを単純なJoinColumnに置き換えてみたところ、この例外が発生しました。

原因: org.hibernate.AnnotationException: 単一のプロパティにマップされていない com.wb.adapter.model.Asset を参照する com.wb.adapter.model.AssetSystem.asset の referencedColumnNames(assetID、fiscalPeriodID)

私はJPAを初めて使用し、何が間違っているのかわかりません。また、JPAで上記のテーブルをモデル化するより良い方法はありますか?これにより、この問題が実質的に解決されます。

よろしくお願いします。

サヒール

4

1 に答える 1

0

@PrimaryKeyJoinColumns を @JoinColumns に置き換え、アセット参照用に @MapsId("compositeKey") を追加してみてください。

于 2013-09-30T08:03:45.937 に答える