当前位置: 首页 > 面试题库 >

通过原型搜索休眠实体

闽鸿宝
2023-03-14
问题内容

我有这样的JPA实体类:

@Entity
@Table(name = "person")
public class Person {
   @Id
   private Long id;
   private String lastName;
   private String firstName;
   private String country;
   private String gender; 
...
//setters and getters are omitted
}

我需要这样的搜索方法 List<Person> findAll(Person searchCriteria)

用法示例:

Person criteria1 = new Person();
criteria1.setFristName("John");
criteria1.setCountry("Usa");

//returns all John from Usa with any lastName
List<Person> searchingResult = findAll(criteria1);

Person criteria2 = new Person();
criteria2.setGender("m");
criteria2.setCountry("Holland");

//returns all man from Holland
List<Person> anotherSearchingResult = findAll(criteria2);

我对findAll方法的想法是

String query = "select * from person where ";
if(criteria.getLastName() != null) query+= "last_name = "+ criteria.getLastName();
if(criteria.getGender() != null) query+= "gender = "+ criteria.getGender();
etc
List<Person> = session.execute(query);

但这太丑陋了,看起来有些开销。谁能帮助我findAll更礼貌地邀请该方法?我可以使用任何Java技术或框架。


问题答案:

所以您要寻找 原型 吗?HibernateExample为此提供了一个方便的标准,因此,如果您不介意将自己与Hibernate
API捆绑在一起,请尝试以下来自docs的示例:

Cat cat = new Cat();
cat.setSex('F');
cat.setColor(Color.BLACK);
List results = session.createCriteria(Cat.class)
    .add( Example.create(cat) )
    .list();

它具体说:

版本属性,标识符和关联将被忽略。默认情况下,排除空值属性。

这正是您似乎想要的。



 类似资料:
  • 问题内容: 我使用spring数据并hibernate@ Filter / @ FilterDef来过滤软删除的实体。似乎springRepository.findOne(id)总是返回值,即使id被软删除。此方法以及通过外键搜索其他字段的where子句中不包含过滤器。在这种情况下是否可以启用过滤器,使其可以用作@Where注释? 问题答案: 我有同样的问题。我已经通过实现HibernatePer

  • 问题内容: 考虑: 查询将是这样的: 如何实现按孩子计数? 换句话说,返回的TParent列表的顺序将由TChildSet计数决定。 我知道@Formula可以在SQL环境中使用。我不确定Lucene是否可以使用类似的东西? 任何帮助,指点,评论甚至批评都欢迎。 非常感谢约翰 问题答案: 在hibernate搜索中,您可以为此创建一个自定义Bridge。 类似于以下内容: 使用自定义桥实现:

  • 问题内容: 是否可以仅对hibernate-search的注释(bean => document / document => bean mapping)使用hibernate-search,而不使用数据库?如果是这样,是否有任何在线样本基本上显示了如何进行设置? 我发现了以下内容:http : //mojodna.net/2006/10/02/searchable-annotation-drive

  • 问题内容: 我想知道如何使用Range-Query在Hibernate Search中按日期进行搜索,还是我必须实现任何过滤器?以下是我在Record Entity中的字段 我的要求是找到两个日期之间分析的记录,例如。2011年11月11日至2012年11月11日。我很困惑如何执行此操作。 问题答案: 您应该使用 从 和 到 的范围查询。 因为您使用 DateTools 自己创建了基于字符串的搜索

  • 问题内容: JodaTime有一个提供Hibernate持久性的库。最近,我开始研究Joda-Money,开始了解如何使用hibernate来保持这种状态,而我看不到任何库。 有什么建议么? 问题答案: 好吧,我把你的意见,并炮制了钱的自定义类型为乔达库中的定义,作为参考的人可以看看它在这里,在这里使用和测试自定义类型在这里

  • 问题内容: 在对象级别,实体类型和值类型之间有什么区别?我知道实体将具有ID,但值将没有,但为什么我们需要不同的方式来映射实体与值类型? 这样做是为了让hibernate状态可以对值类型应用任何优化? 问题答案: 实体已经定义了表的持久化位置。因此,当您在实体A中拥有B实体的列表时,则无需为B定义目标表:B已经定义了它。值类型没有任何关联的表,因此实体A 中的in 映射必须定义将使用哪个表来存储此