繁体   English   中英

JPQL联接2个表:编写jpql

[英]JPQL join 2 tables: Writing 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;
}

现在,我想要所有类别有价值的事件。 我对jpa很陌生。 很难为此编写查询。 如果您能帮助我,那将是有帮助的。

编辑:我在事件表中存储categoryId。 我希望能够按类别名称进行搜索。 类别名称仅保存在类别表中。 所以我认为我需要对类别表进行联接。

用这样的查询:

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM