- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 hibernate 4 和 Spring 3。正如长标题所说,我需要创建一个这样的方法
public list<MyObject> findByExample(MyObject exampleInstance){
Criteria crit = session.createCriteria(MyObject.class);
Example example = Example.create(exampleInstance);
crit.add(example);
return crit.list();
}
但让 Hibernate 使用 like
语句将示例与字段的值进行比较。类似于 findByLikeExample(MyObject exampleInstance)
示例:
MyObject 映射到一个表 myobject
,其中包含 name
和 description
列,因此它看起来像这样
@Entity
public class MyObject{
private String name;
private String description;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
表格myobject
包含两行
+--------------------------------------------+
|name | description |
+--------------------------------------------+
|test line | This is a test line |
|Second line | This is the second test line |
+--------------------------------------------+
我想要这个代码
MyObject exampleInstance= new MyObject();
exampleInstance.setName("line");
return findByLikeExample(exampleInstance);
返回表中的所有行(两个不同的 MyObject
实体)
重要说明:MyObject
在这种情况下可以是类型参数,所以我事先不知道字段。我知道这可以通过在我的 exampleInstance
的所有字段上循环(使用反射)并添加 Restriction.like
到 crit
来实现我的字段中包含的值(如果不为 null 并且它支持 like 语句),但我宁愿不加思考地这样做。可能吗?
最佳答案
<strong>"%"</strong>
您只需要通过调用 .enableLike()
来启用该功能。在创建 Example example
时在您的 DAO findByExample 方法中。
示例代码(未经测试!):
findByExample 方法允许在generic DAO 实现中使用'like':
@Override
@Transactional(readOnly = true, propagation = Propagation.MANDATORY)
public List<E> findByExample(final E exampleEntity) {
final Example example = Example.create(exampleEntity).excludeZeroes().enableLike();
return this.session.createCriteria(this.domainClass).add(example).list();
}
在服务层中的使用:
MyObject exampleInstance= new MyObject();
exampleInstance.setName("%line%");
Collection<MyObject> results = myObjectDao.findByExample(exampleInstance);
(在您的示例中 exampleInstance.setName("%line");
也会匹配)
关于java - 具有 'like' 的 Hibernate findByExample 类似于示例中非空(字符串?)字段的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23777715/
有没有人有一个很好的例子来说明如何在 JPA 中通过任何实体类型的反射在通用 DAO 中执行 findByExample?我知道我可以通过我的提供者(Hibernate)做到这一点,但我不想打破中立性
我有两个表用户和地址表 它们在 HBM 中的关系是 因此,当我在 User Pojo 中设置 Address Pojo 并为 User Pojo 调用 findByExample 时。 它
我正在尝试使用 Hibernate QBE(实际上是 Spring 的 HibernateTemplate.findByExample() )按用户名返回用户列表。我使用“已知良好”值进行搜索(数据库
我正在为一个新项目使用 Hibernate 开发域模型。我有一个基本上由 longName:String 组成的实体, shortName:String和 otherNames:Collection
我正在使用 hibernate 4 和 Spring 3。正如长标题所说,我需要创建一个这样的方法 public list findByExample(MyObject exampleInstance
我是一名优秀的程序员,十分优秀!