我将Spring JPA
与hibernate
一起使用并拥有一个拥有大量属性的实体,让我们说它有五个;如下图所示:
@Entity
@Table
public class MyEntity{
Object properties1;
Object properties2;
Object properties3;
Object properties4;
Object properties5;
}
Spring提供了一个非常好的功能;它根据存储库中的方法名称生成JPQL查询。例如:
List<MyEntity> findByProperties3(Object properties3);
在我的情况下,用户有一个html表单来搜索MyEntity
。这个html表单分别有五个字段,分别对应MyEntity
类的五个属性。用户还可以将任何字段留空,以便搜索将在查询中包含此属性的所有值。
我知道如何实现它,但它会脱离Spring的便捷方法,需要大量的编码。我的想法是在存储库接口上创建一个方法,用于所有可能性:用户将所有字段留空,填充一个字段,两个字段等;最多五个领域。不幸的是,这意味着会有:
的可能性。我怎样才能避开这条道路?理想情况下,我只创建一种方法:
List<MyEntity> findByProperties1andProperties2andProperties3andProperties4andProperties5(Object p1,Object p2,Object p3,Object p4,Object p5)
但是,如果某些pX
为空,那么Spring JPA会明确地找到MyEntity
,propertiesX
等于null,而不是所有可能的值,例如, 1
,2
,3
,4
,5
和null
。
=========== EDIT ===============
我仍然希望得到某人关于Spring JPA
解决方案的回答,但我在解决方案的同时使用了javax.persistence.criteria.CriteriaBuilder
。