0

さまざまなソースから 1 日あたり約 9 GB の生のテキスト データを取得している Web サービスがあります。この大部分は、非常に頻繁に繰り返される比較的短い (100 ~ 300) 文字列です。数千の一意の文字列しかない場合があります

私は通常、事前に最適化したくありませんが、ストレージの問題は開発のすぐ後に問題になるでしょう。

JPA エンティティがあり、この投稿のために単純化します。これは、親テーブルにマップされる文字列/ID のペアです。

@Entity
public class DeduplicatedString implements Serializable {


private static final long serialVersionUID = 1L;

@Id
@GeneratedValue
private int id;


public int getId() {
    return id;
}




public void setId(int id) {
    this.id = id;
}

private String value;
public DeduplicatedString() {
    super();
}
public String getValue() {
    return value;
}
public void setValue(String value) {
    this.value = value;
}

}

新しい文字列を追加するときに既存のデータをチェックし、完全に一致するものが既に見つかっている場合は既存のレコードを返すように JPA リスナー (beforeInsert?) をセットアップしたいと思います。

私は通常、挿入トリガーを設定するだけで、JPAでこれを行う方法がよくわかりません。

ありがとう!

4

2 に答える 2

1

必要な機能は、JPA によって直接サポートされていません。注釈がありますが(他のいくつか@PrePersistの注釈とともに)、これらはシステムの監視や、エンティティへの土壇場での変更などにのみ使用できます。JPA はデータベースで実行されるトリガーを認識せず、現在、2 つをリンクするメカニズムはありません。

于 2013-02-04T21:17:52.273 に答える
0

ポインターとはどういう意味ですか? レコードを挿入したくないということですか?

一般に、アプリケーションでこれを行うには、最初に文字列でオブジェクトをクエリし、見つからない場合にのみ新しいオブジェクトを永続化する必要があります。

于 2013-02-05T14:07:47.553 に答える