Varchar列不区分大小写的OpenJpa

时间:2013-02-13 10:37:32

标签: openjpa

我有一个实体( 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个对象,该对象为null,因为它无法在数据库中找到。 当中间表更新时,我得到了这个例外:

  

错误:“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'

检索结果。

1 个答案:

答案 0 :(得分:1)

  

在我的表格中,我有一个条目:Test@test.com。我想这个问题:

select * from my_table where address = 'test@test.com'

好吧,如果你这样说,你也可以将查询重组为:

select * from my_table where LOWER(address) = LOWER(:email)

要使此查询有效,您的数据库需要function-based index - 否则就是O(n)复杂。

相关问题