2017-10-17 2 views
1

Hibernate Searchでboolean @fieldのインデックスを作成する際に問題が発生しました。問題は、オブジェクトが変更されたときに残りのフィールドが変更されても、ブール値フィールドだけがオブジェクトの古い状態を保持します。Hibernateでboolean @Fieldをインデックスする方法フィールドがdbテーブルにないかどうかを調べる

@JsonIgnore 
@Field(name = "isWarning", index = Index.YES) 
@SortableField(forField = "isWarning") 
private boolean isWarning() { 
    //some logic 
} 

この問題にアプローチするにはどうすればよいですか?

答えて

0

あなたが言及するこの「論理」は、他のエンティティにアクセスすると仮定します。これらのエンティティがisWarningメソッドを持つエンティティに含まれていることをHibernate Searchに伝える必要があります。

isWarningメソッドがMainEntityというエンティティで定義され、SomeOtherEntityという別のエンティティからデータにアクセスしたとします。

SomeOtherEntity

、あなたは協会の裏側になります:ちょうど@ContainedInを追加し、良いことがあり

public class SomeOtherEntity { 
    @ManyToOne // Or @OneToOne, or whatever 
    private MainEntity mainEntity; 
} 

を:残念ながら、これは持つことができる、ということ

public class SomeOtherEntity { 
    @ManyToOne // Or @OneToOne, or whatever 
    @ContainedIn 
    private MainEntity mainEntity; 
} 

注意SomeOtherEntityが頻繁に更新される場合のパフォーマンス面での重要な影響:Hibernate Searchは正確にはを認識しません。部分のSomeOtherEntityはで使用されます従って、SomeOtherEntityの変化がisWarningの結果に影響を与えない場合であっても、SomeOtherEntityが変化するたびに再索引付けされる。 A ticket has been filed to address this issueですが、依然として保留中です。

+0

私たちはこのソリューションを試しましたが、これまでのところうまくいきません:)、唯一の方法は動作しますが、使用したくありません。セーブした後、再びhibernateにobjを再索引付けさせることです。 –

+0

私は何度もそれを使用しており、それは働いたので、調査したいかもしれません。どのバージョンのHibernate Searchを使用していますか?たぶんあなたはhttps://hibernate.atlassian.net/browse/HSEARCH-2868の影響を受けていますか? –

関連する問題