私は春のブートアプリケーションを作成しようとしている、と私は研究機能を設定したいと思います。
私は、これまで行ってきました:
私は2つのクラス、持ってPerson.javaとHouse.javaをしてOneToOne
この2つのクラス間の関係。私は私が家の特性に応じて人を見つけることができる研究機能を作成したいと思います。exempleについて郵便番号「45000」と都市「ORLEANS」と家を持っているすべての人を見つけます。このために私は私のリポジトリ内の関数を宣言しましたfindByHouseZipcodeAndCity
。
さて、問題は、私の家のエンティティは、約15の特性を有することである、と私は、これらの15体の特性のいずれかと研究を実行したい:郵便番号のみで、郵便番号、市、市と表面...組み合わせの多くを行いいる、と私ドン「Tは、作成したいfindBy
それぞれの組み合わせのための方法を。
私は自分にパラメータとして与えることを試みたfindBy
検索のcriteriasが含まれていますハウスオブジェクト。Hibernateは私にこのエラーがスローされますので、これは動作しません:object references an unsaved transient instance - save the transient instance before flushing
。問題は、私は私が私の検索のcriteriasでそれを埋めるため、家のインスタンスを作成しています、と私は私のfindByのためにそれを使用することですが、私はfindByが作る見つけflush()
ハウス実体が保存されていない一方で、(そして、私ドン」 t)は、それが検索のためだけなので、それを保存することにしたいです。
私は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...
}
あなたが使用できる例でクエリを、動的なクエリの作成を可能にし、すべてのクエリを記述する必要はありませんユーザーフレンドリーなクエリテクニック。
以下のエンティティを考えてみます。
@Data
@Entity
public class Person {
@Id
private String id;
private String firstname;
private String lastname;
private Address address;
}
指定された名前を持つすべての人を検索するには、使用することができます。
Person person = new Person();
person.setFirstname("Dave");
Example<Person> example = Example.of(person);
Iterable<Person> searchResult = repository.findAll(example);
そして、あなたは一人のために検索する必要がある場合は、以下を使用します。
Person searchResult = repository.findOne(example);