java - JPQL 连接 2 个表 : Writing jpql

标签 java sql hibernate jpa jpql

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

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

关于java - JPQL 连接 2 个表 : Writing jpql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10675184/

相关文章:

java - 重载或重写 equals() 方法

java - 使用java在JTable中导入excel文件

java - 并行调用方法时的线程安全问题

mysql - SQL读取网格矩阵

java - 自动持久化一个复杂的 Java 对象

java - 使用 JOptionPane 和 JFrame 的程序中的对话框未显示我的代码中的内容

mysql - SQL根据列的计数进行分组

sql - 如何在 SQL Server 中查找数字序列中的空白

java - 未指定 hibernate.search.lucene_version : using LUCENE_CURRENT

java - Hibernate 映射一对一