复合主键,仅由其中一个搜索

时间:2016-08-19 14:40:07

标签: java spring hibernate

我有一个复合主键

    public class MainPk{

     private int keyOne;
     private int keyTwo;

// getters and setters
    }

我只设置了KeyOne但是在查询中搜索了两个值

select * from ..... where keyOne = ? and KeyTwo = ?

无论如何只搜索一个?我知道我可以使用标准或查询,我问这样是否可行

2 个答案:

答案 0 :(得分:1)

问题是你可能正在做类似以下的事情:

MainPk id = new MainPk();
id.setKeyOne( someValue );

List<YourEntity> results = session
       .createQuery( "FROM YourEntity e WHERE e.id = :id" )
       .setParameter( "id", id )
       .getResultList();

您可以通过显式查询复合ID的单个值来重建查询并完成您要查找的内容。 Hibernate不知道是否将复合中的空值转换为文字null,或者它是否忽略

List<YourEntity> results = session
       .createQuery( "FROM YourEntity e WHERE e.id.keyOne = :keyOne" )
       .setParameter( "keyOne", someValue )
       .getResultList();

答案 1 :(得分:0)

您可以搜索任何财产。为什么不使用Criteria and Restriction类?它们允许您根据任何属性轻松查询。查看Hibernate的文档:

https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html