2017-08-31 3 views
0

は、私は次のエンティティを持っているが見つかりませんでした:私は追加する前に複合キーのプロパティ

@Entity @Table @Audited 
public class MyParent { 

    @Id 
    @Column 
    Integer id; 
    @OneToMany(mappedBy = "id.myParent", orphanRemoval = true) 
    @Cascade({ CascadeType.ALL }) 
    List<Child> children; 
} 

@Entity @Table @Audited 
public class Child { 

    @EmbeddedId 
    ChildId id = new ChildId(); 
} 

@Embeddable 
public class ChildId implements Serializable { 

    @MapsId("my_parent") 
    @JoinColumn(name = "my_parent_id") 
    @ManyToOne 
    MyParent myParent; 
    @Column 
    String name; 
} 

は、注釈@Auditedすべてがうまく働きました。その後、Hibernate 5.1は合成キーが好きではなかったため、すべてが失敗しました(HHH-7625参照)。

これまでずっとかかっていましたが、今は5.2に更新されています。今はすべてが機能します...監査を除いて。

org.hibernate.QueryException:プロパティを解決できませんでした:のmyParent_id:私は次の例外を取得org.acme.project.Child_AUDを[org.acme.project.Child_AUDからe__を選択e__ここで、e __ myParent_id =。 :myParent_idとe__.originalId.REV.id =(<取り外し内部クエリ>)]

私はこのコードを使用:

AuditReader auditReader = AuditReaderFactory.get(this.em); 
MyParent parent = auditReader .find(MyParent.class, id, revision); 
parent.getChildren(); // exception is here 

のでEnversからmyParent_idを取得していますか?よく分かりません。私はそのIDに列my_parent_idの名前を変更しようとしましたが、何もしませんでした。

そして、私はChildId.myParentをIDに置き換えようとしましたが、それはどちらも役に立ちません。

This paragraphのドキュメントは非常に似ていますが、その内容に基づいて何をすべきかわかりません。

何か不足していますか?それとももう一つのバグですか?コードをどのように動かすには?

+0

'MyParent'の' @ OneToMany'マッピングで '@AuditMappedBy(mappedBy =" id.myParent ")'を試して、Enversに影響を与えるかどうか確認しましたか? – Naros

+0

@Narosはい、例外は次のとおりです。「@AuditMappedByは存在しないプロパティを指します:org.acme.project.Child.id.myParent」 –

答えて

0

さらなるレビューの後、これはHHH-11770として報告されている既知の問題です。これは修正され、5.2.11.Final Hibernate Enversリリースに含まれています。

OneAuditedEntityQueryGeneratorは、リファレンスが@IdClassを指していて、@EmbeddedIdのユースケースをサポートしていない場合にのみサポートされていました。

5.2.11.Finalの公式リリースを待つことができない場合はhibernate-enversの最新スナップショットを使用するか、このcommitを使用してコード変更を統合することができます。

最新のスナップショットを使用する場合は、ORMのスナップショットも適用することをお勧めします。