java - 使用 HQL 和单独的 IdClass 进行复合键查询

标签 java hibernate hql

我有一个使用复合键定义的 hibernate 实体,在列上使用 id 类和 id 注释。工作正常。不过我现在想做一个 composite key query

Select mt 
from MyTable mt 
where (mt.id, mt.column2) in (:myListOfCompositeKeys)

当我定义了如下所示的实体(不使用embeddedId)时,使用HQL的语法是什么。

@Entity
@IdClass(MyKey.class)
@Table(name = "MY_TABLE")
public class MyTable implements Serializable {
    @Column(name = "ID")
    @Id
    private Long id;
    @Column(name = "Column2")
    @Id
    private Long column2;

或者我是否需要使用embeddedId,如果是的话,HQL 语法是什么?

最佳答案

如果您使用@EmbededId ,您必须重写 equalshashCode 方法和 HQL,因为它会如下所示。

SELECT mt
FROM MyTable mt
WHERE mt.id 
IN(:listOfKeys)

关于java - 使用 HQL 和单独的 IdClass 进行复合键查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30095676/

相关文章:

nhibernate - 为什么 HQL 中的 NHibernate 简单选择到 SQLite 数据库不起作用?

hibernate - 想用 HQL 只获取 5 条记录

java - 在编写 Java 代码时,我们真的需要 @Override 等吗?

java - 在 NamedParameterJdbcTemplate 类型中不适用于参数 (String, new RowMapper<User>(){})

java - org.hibernate.QueryException : * only allowed inside aggregate function in SELECT

hibernate - GORM,获取org.hibernate.HibernateException:在afterLoad()中打开事务时找到同一集合的两个表示形式

java - HQL 查询正确吗?

browser - 嵌入在浏览器中的Applet嵌入在JFrame中

javax.print PrintJobListener printJobCompleted 或 printJobFailed 事件从未被调用

java - Spring Boot native 查询抛出错误,但在mysql中有效