CRS*_*CRS 1 java sql hibernate jpa jpql
我有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;
}
Run Code Online (Sandbox Code Playgroud)
现在我想要所有类别都有价值的事件.我对jpa很新.很难为此编写查询.如果你可以帮助我,那将会很有帮助.
编辑:我在事件表中存储categoryId.我希望能够按类别名称搜索.类别名称仅保存在类别表中.所以我想我需要与类别表进行联接.
使用这样的查询:
final String query = "SELECT e FROM Event e WHERE e.category = :category";
Run Code Online (Sandbox Code Playgroud)
您可以使用多种方法检索记录,但这里有一个:
final EventCategory category = ...;
TypedQuery<Event> query = entityManager.createQuery(query, Event.class);
query.setParameter("category", category);
final List<Event> events = query.getResultList();
Run Code Online (Sandbox Code Playgroud)
*编辑*
默认情况下,上面说明的方法将根据为类别对象定义的主键进行搜索.如果要搜索其他属性,则需要在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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
853 次 |
| 最近记录: |