首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPQL联接2表:编写jpql

JPQL联接2表:编写jpql
EN

Stack Overflow用户
提问于 2012-05-21 00:29:41
回答 1查看 854关注 0票数 1

我有两个表第一个表-事件第二个表-类别

代码语言:javascript
复制
@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存储在events表中。我希望能够按类别名称进行搜索。类别名称只保存在类别表中。所以我想我需要做一个与category表的连接。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-21 00:39:03

使用类似如下的查询:

代码语言:javascript
复制
final String query = "SELECT e FROM Event e WHERE e.category = :category";

您可以使用多种方法中的任何一种来检索记录,但以下是其中一种:

代码语言:javascript
复制
final EventCategory category = ...;
TypedQuery<Event> query = entityManager.createQuery(query, Event.class);
query.setParameter("category", category);
final List<Event> events = query.getResultList();

编辑* *

默认情况下,我上面演示的方法将基于为类别对象定义的主键进行搜索。如果你想通过其他属性进行搜索,那么你需要在你的JPQL中指定:

代码语言:javascript
复制
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();
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10675184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档