2016-10-19 2 views
0

私は、エンティティの何百もの既存のプロジェクトでのHibernate Searchを統合する問題を抱えているが、実体の少なくとも半分を構成キーとして@IdClass注釈を使用するを使用して合成の鍵。 @IdClassアノテーションを使用して問題を解決できますか?にHibernate Searchと@IdClass

また、私はこの記事を読んでHibernate search and composed keyが、私は私の問題を解決するために管理していません。

エンティティクラス:

@Entity 
@Table(name="FAKVS_DB") 
@IdClass(value=PK_FAKVS_DB.class) 
@Audited 
@Indexed 
public class FAKVS_DB implements Serializable { 

    @Id 
    @Column(name="Key_FAM", length=10, nullable=false)l 
    private String keyFam; 

    @Id 
    @Column(name="Komponentennr", nullable=false) 
    private Integer komponentenNr; 

    @Id 
    @Column(name="Hinweis", nullable=true, length=4) 
    private String hinweis; 

    //getters and setters 
} 

とキーで構成:

私は、次の例を持っている

public class PK_FAKVS_DB implements Serializable { 

    private String keyFam; 
    private Integer komponentenNr; 
    private String hinweis; 

    //getters and setters 
} 

発生するエラーは、次のとおりです。

HSEARCH000058: HSEARCH000212: An exception occurred while the MassIndexer was transforming identifiers to Lucene Documents 
java.lang.ClassCastException: package.entities.module.fi.pk.PK_FAKVS_DB cannot be cast to java.lang.Integer 
at org.hibernate.type.descriptor.java.IntegerTypeDescriptor.unwrap(IntegerTypeDescriptor.java:36) 
at org.hibernate.type.descriptor.sql.IntegerTypeDescriptor$1.doBind(IntegerTypeDescriptor.java:63) 
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:90) 
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:286) 
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:281) 
at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1995) 
at org.hibernate.loader.Loader.bindParameterValues(Loader.java:1966) 
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1901) 
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1862) 
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1839) 
at org.hibernate.loader.Loader.doQuery(Loader.java:910) 

もしI @IdClを使用することはできませんお尻の注釈は、あなたは何が選択肢であるか教えていただけますか?

ありがとうございます。

答えて

0

代わりに、Hibernate SearchによってIdとして使用される新しいプロパティを追加することができます。 @DocumentIdでこれをマークすると、Hibernate検索エンジンが代替プロパティをインデックス内の識別子として扱わせることができます。

この新しいプロパティは、コース固有のものであることを確認する必要があります。これは通常、実際のIDからStringを生成することによって実行できます。新しいゲッターに@Transientというアノテーションを付けると、データベースに永続化されないことがあります。

+0

返信@Sanneに感謝します。私はあなたがHibernate Searchのプロジェクトリーダーとして働いていることを知りました。近い将来、Hibernate Searchが "@IdClass"アノテーションでも動作するかどうかについてのアイデアはありますか? –

関連する問題