ID と文字列を一意のフィールドとして持つエンティティ ( Entity1 ) があります。
@Id
@GeneratedValue
@Column(name = "entity1_id")
private long entity1_id;
@Column(name = "address", nullable = false, unique = true)
private String address;
次のように、別のエンティティ ( Entity2 )との関係があります。
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "middle_table", joinColumns = @JoinColumn(name = entity2_id), inverseJoinColumns = @JoinColumn(name = "entity1_id"))
private List<Entity> entity1List= new ArrayList<Entity>();
FetchType は熱心なので、データベースから Object2 を取得すると、Entity1 の完全なリストが付属しています。問題は、address
フィールドが小文字であることになっていることですが、移行の問題により、住所に大文字が含まれる場合があります。このような場合Entity2.entity1List
、配列には 1 つのオブジェクトが含まれますが、これはデータベースで見つからないため、null です。中央のテーブルが更新されると、次の例外が発生します。
エラー: 列 "entity1_id" の null 値が not-null 制約に違反しています {prepstmnt 892492234 INSERT INTO public.middle_table(entity2_id, entity1_id) VALUES (?, ?) [params=?, ?]} [code=0, state=23502]
より明確にするために、データベースに があるとしましょう:Test@test.com
が、 と同様に識別されるはずtest@test.com
です。
編集
全体の説明は必要ないことに気づきました。私の問題をもっと簡単に説明できます:
私のテーブルにはエントリがあります: Test@test.com
. 私はこのクエリが欲しい:
select * from my_table where address = 'test@test.com'
結果を取得します。