我有一个实体(Entity1),其 id 和一个字符串作为唯一字段:
@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 个对象,该对象为空,因为在数据库中找不到它。当中间表被更新时,我得到了这个异常:
错误:“entity1_id”列中的空值违反非空约束 {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'
检索结果。