gpt4 book ai didi

java - 具有 'like' 的 Hibernate findByExample 类似于示例中非空(字符串?)字段的行为

转载 作者:行者123 更新时间:2023-11-29 05:23:18 25 4
gpt4 key购买 nike

我正在使用 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,其中包含 namedescription 列,因此它看起来像这样

@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.likecrit 来实现我的字段中包含的值(如果不为 null 并且它支持 like 语句),但我宁愿不加思考地这样做。可能吗?

最佳答案

Hibernate 4 在通过示例查询 中支持“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com