【发布时间】:2013-02-13 10:37:32
【问题描述】:
我有一个实体 (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) 值 (?, ?) [params=?, ?]} [code=0, state=23502]
为了更清楚,假设我在数据库中有:Test@test.com,但它应该与test@test.com 一样好识别。
编辑
我刚刚意识到不需要全部解释。我可以用更简单的方式解释我的问题:
在我的表中,我有一个条目:Test@test.com。我想要这个查询:
select * from my_table where address = 'test@test.com'
检索结果。
【问题讨论】:
标签: openjpa