Я пытаюсь создать приложение с загрузочной пружиной и хочу настроить функцию исследования.
Что я сделал на данный момент:
У меня есть два класса, Персона. java и Хаус. java с OneToOne
отношениями между этими двумя классами. Я хотел бы создать исследовательскую функцию, которая позволит мне находить человека в зависимости от свойств дома. Например, найти всех людей, у которых есть дома с почтовым индексом "45000" и городом "ORLEANS". Для этого я объявил функцию в своем репозитории findByHouseZipcodeAndCity
.
Теперь проблема в том, что у моего объекта Дома около 15 свойств, и я хочу провести исследования с любым из этих 15 свойств: только почтовый индекс , почтовый индекс и город, город и поверхность ... что делает много комбинаций, и я не хочу создавать findBy
методы для каждой комбинации.
Я пытался дать в качестве параметра my findBy
объект House, который будет содержать критерии поиска. Это не работает, поскольку Hibernate выдает мне эту ошибку: object references an unsaved transient instance - save the transient instance before flushing
. Проблема в том, что я создаю экземпляр Дома, я заполняю его критериями поиска и использую его для своего findBy, но я обнаружил, что findBy создает flush()
, в то время как сущность Дома не сохраняется (И Я не хочу, чтобы это было сохранено, так как это только для поиска).
Я нашел такие решения, как использование критериев JPA, но я хотел бы знать, могу ли я выполнить свой поиск, просто используя сущность в качестве параметра для метода 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;
}
Дом. 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...
}