我有一个带有复合键的hibernate实体,如下面的示例所示。
class A{
B id; //this is the composite key for this class
int property1;
int property2;
int property3;
//getters and setters
}
class B{
String prop1;
String prop2;
String prop3;
}
在上面的示例中, A 实体将 B 作为复合键。现在我通过将复合键传递给crieteria来编写以下标准来获取 A 对象。示例代码如下。
B id=new B("Prop1Val","Prop2Val","Prop3Val");
(A) sessionFactory.getCurrentSession().get(A.class,id)
我的问题是:
是否正确的方法来创建像下面这样的标准来解决问题 问题
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(A.class);
criteria.add(Restrictions.eq("id.prop1",id.getProp1()).ignoreCase());
criteria.add(Restrictions.eq("id.prop2",id.getProp2()).ignoreCase());
criteria.add(Restrictions.eq("id.prop3",id.getProp3()).ignoreCase());
有没有简单的方法将hbm文件配置为用例 默认情况下不敏感?
答案 0 :(得分:1)
您的标准看起来很好,但默认情况下,您执行不区分大小写的请求没有多大意义。它对数据库中的几行有什么作用,PK只有大小写不同?
我只是确保你的关键属性总是小写,如果将大写值传递给B构造函数,则抛出异常,或者自动将它们转换为小写。
如果某些其他应用程序在数据库中插入数据,您可以使用数据库中的已检查约束执行相同的操作。