1

2 つのテーブルがあります 最初のテーブル - イベント 2 番目のテーブル - カテゴリ

@Entity
public class Event {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long eventId;
private String name;
@ManyToOne
@JoinColumn(name = "category_id")
private EventCategory category;
//getters and setters
}

@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = { "CATEGORY" }))
public class EventCategory {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long categoryId;
@NotNull
private String category;
@OneToMany(mappedBy = "category", cascade = CascadeType.ALL)
private List<Event> events;
}

ここで、カテゴリが何らかの値であるすべてのイベントが必要です。私はjpaにとても慣れていません。このためのクエリを書くのに苦労しています。助けていただけると助かります。

編集: イベント テーブルに categoryId を格納しています。カテゴリ名で検索できるようにしたい。カテゴリ名はカテゴリテーブルにのみ保存されます。したがって、カテゴリテーブルと結合する必要があると思います。

4

1 に答える 1

5

このようなクエリで:

final String query = "SELECT e FROM Event e WHERE e.category = :category";

さまざまな方法でレコードを取得できますが、次の方法があります。

final EventCategory category = ...;
TypedQuery<Event> query = entityManager.createQuery(query, Event.class);
query.setParameter("category", category);
final List<Event> events = query.getResultList();

* 編集 *

デフォルトでは、上で説明したメソッドは、カテゴリオブジェクトに定義された主キーに基づいて検索します。他のプロパティで検索する場合は、JPQLでそれを指定する必要があります。

final String query = "SELECT e FROM Event e WHERE e.category.name = :categoryName";

final String categoryName = ...;
TypedQuery<Event> query = entityManager.createQuery(query, Event.class);
query.setParameter("categoryName", categoryName);
final List<Event> events = query.getResultList();
于 2012-05-20T16:39:02.650 に答える