2016-10-19 27 views
0

我有一個問題,將Hibernate Search與現有項目中的數百個實體相集成,但至少有一半實體使用@IdClass註釋作爲組合鍵。我可以使用註解@IdClass解決問題嗎?使用@IdClass Hibernate搜索和組合鍵使用@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) 

如果我不能使用@IdCl屁股註釋你可以告訴我什麼是替代品?

非常感謝您提前。

回答

0

另一種方法是添加一個新的屬性作爲Id通過Hibernate Search使用。您可以用@DocumentId來標記這一點,讓Hibernate搜索引擎將替代屬性視爲索引中的標識符。

你將需要確保這個新的屬性是唯一的,當然,這通常可以通過從真實ID生成String來完成。您可能想用@Transient註釋新的吸氣劑,以便它不會持久存在數據庫中。

+0

非常感謝@Sanne的回覆。我看到你是Hibernate Search的項目負責人。任何想法,如果在不久的將來Hibernate搜索將工作(接受)與「@IdClass」註釋? –

相關問題