我正在尝试创建一个Spring Boot 应用程序,我想设置一个研究功能。
到目前为止我做了什么:
我有两个类,Person.java和House.java,这两个类之间有一个OneToOne
关系。我想创建一个搜索函数,它允许我根据House属性查找Person。为了找到所有拥有zipcode为“45000”和城市为“ORLEANS”的房屋的人。为此,我在我的存储库findByHouseZipcodeAndCity
中声明了一个函数。
现在,问题是我的House实体有大约15个属性,我想对这15个属性中的任何一个进行研究:仅邮政编码,邮政编码和城市,城市和表面......这会产生很多组合,我不想为每个组合创建findBy
方法。
我尝试给予一个包含搜索条件的House对象作为findBy
的参数。这不起作用,因为Hibernate抛出了以下错误:object references an unsaved transient instance - save the transient instance before flushing
。问题是我创建了一个House的示例,我用我的搜索条件填充它,我用它来搜索我的findBy,但是我发现findBy生成了一个flush()
,而房子实体没有保存(我不希望它被保存,因为它只是一个搜索)。
我已经找到了一些解决方案,比如使用JPA Criterias,但我想知道是否可以只使用实体作为findBy方法的参数来执行搜索。
提前感谢你的帮助
PersonRepository.java
@Repository
public interface PersonRepository extends JpaRepository<Person, Long>{
List<Person> findByHouseZipcodeAndHouseCity(String zipcode, String city);
List<Person> findByHouse(House house);
}
字符串
Person.java
@Entity
public class Person{
@Id
@SequenceGenerator(name = "INFO_ACTION_SEQ", sequenceName = "INFO_ACTION_SEQ")
@GeneratedValue(generator = "INFO_ACTION_SEQ", strategy = GenerationType.AUTO)
@Column(name = "ID_PERSON", columnDefinition = "INTEGER")
private Integer id;
private String name;
private String surname;
@OneToOne(cascade = CascadeType.ALL)
private House house;
}
型
House.java
@Entity
public class House{
@Id
@SequenceGenerator(name = "INFO_ACTION_SEQ", sequenceName = "INFO_ACTION_SEQ")
@GeneratedValue(generator = "INFO_ACTION_SEQ", strategy = GenerationType.AUTO)
@Column(name = "ID_HOUSE", columnDefinition = "INTEGER")
private Integer id;
private String city;
private String street:
private String zipcode;
private String country;
// Other properties...
}
型
1条答案
按热度按时间mctunoxg1#
您可以使用query by example,这是一种用户友好的查询技术,允许动态创建查询,根本不需要编写查询。
考虑以下实体:
字符串
要搜索具有给定姓名的所有人员,您可以使用:用途:
型
而且,如果您需要搜索单个人员,请使用:用途:
型