标签: hibernate-criteria

按条件查询获取第一行表

如何通过使用criteriaHQL查询获取表的第一行?

表创建脚本

   CREATE TABLE MonthlySubscriber(MSISDN bigint(20) 
   NOT NULL, MonthOfYear int(11) NOT NULL, 
   PRIMARY KEY (MSISDN)); 
Run Code Online (Sandbox Code Playgroud)

hibernate hql hibernate-criteria

9
推荐指数
1
解决办法
3万
查看次数

Hibernate标准连接表问题

我有3个实体,如下所示.我想写一个提取产品的查询.在此查询中,参数是optionValues id的列表.

现在我的问题是如何加入这些实体?

产品:

 public class Product{
   //other col

    @OneToMany(mappedBy = "product")
    private Set<Attribute> attributeSet = new HashSet<>();
 }
Run Code Online (Sandbox Code Playgroud)

属性:

public class Attribute{
  @OneToOne
  @JoinColumn(name = "OPTION_VALUE_ID")
  private OptionValue optionValue;

  @ManyToOne
  @JoinColumn(name="PRODUCT_ID",referencedColumnName="id")
  private Product product;
}
Run Code Online (Sandbox Code Playgroud)

optionValue:

 public class OptionValue{
     @Column(name = "id")
     private Long id;

    @Column(name = "value",updatable = true)
    private String value;
 }
Run Code Online (Sandbox Code Playgroud)

我写了一个查询,但我认为我的代码不是一个好的解决方案.

 Criteria aCriteria = null;
    if (!optionValueList.isEmpty()) {
        aCriteria = currentSession().createCriteria(Attribute.class, "attribute");
        aCriteria.createAlias("attribute.optionValue", "optionValue");
        aCriteria.add(Restrictions.in("optionValue.id", optionValueList));
        attributes = aCriteria.list();
    }
    PagingData<Product> pagingData = new PagingData<>(); …
Run Code Online (Sandbox Code Playgroud)

java hibernate jointable hibernate-criteria

9
推荐指数
1
解决办法
877
查看次数

如何在Criteria Query中使用MAP键?

我有这样的Bean

Class TestA
{
    Map<String,TestB> testBMap;
}

Class TestB
{
    String data;
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想取TestA随着地图数据的testBMap地方key ='test1'.

我怎么能用Hibernate做到这一点.

hibernate criteria-api hibernate-criteria

8
推荐指数
1
解决办法
6581
查看次数

休眠标准和计数列

我试图返回一个实体,其列具有另一个表的计数,该表是一对多关系.我想使用hibernate标准,而不是HQL.

select p.*, (select count(*) from child where child.parentid = p.id) as LEVELS
from parent p
Run Code Online (Sandbox Code Playgroud)

hibernate count subquery hibernate-criteria

8
推荐指数
2
解决办法
9956
查看次数

Hibernate标准对儿童的限制

我有一个Hibernate条件调用,我想在一个SQL语句中执行.我正在尝试做的是选择Parent的实例,其中Child具有一系列值的属性(SQL IN子句),所有这些都是在使用外连接加载子项时.这是我到目前为止所拥有的:

 Criteria c = session.createCriteria(Parent.class);

 c.createAlias("children", "c", CriteriaSpecification.LEFT_JOIN)
          .setFetchMode("c", FetchMode.JOIN)
          .add(Restrictions.in("c.property", properties));

 c.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

 return c.list();
Run Code Online (Sandbox Code Playgroud)

这是一些示例数据:

Parent
Parent ID
A
B
C

Children
Child ID    Parent ID   property
...         A           0
...         A           2
...         A           7
...         B           1
...         C           1
...         C           2
...         C           3
Run Code Online (Sandbox Code Playgroud)

我想要做的是如果其中一个孩子的属性等于我的绑定参数,则返回父母及其所有孩子.我们假设属性是一个包含{2}的数组.在这种情况下,调用将返回父A和C,但他们的子集只包含元素2.即父[子]:

A [2]&C [2]

我想要的是:

A [0,2,7]&C [1,2 3]

如果这不是一个bug,它似乎是一个破碎的语义.我不知道如何调用A.getChildren()或C.getChildren()并返回1条记录将被认为是正确的 - 这不是一个投影.即如果我扩充查询以使用默认的选择提取,它将返回正确的子集合,带有大量查询的albiet:

  c.createAlias("children", "c").add(
      Restrictions.in("c.property", properties));
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?如果没有,我怎样才能达到预期的效果呢?

java orm hibernate hibernate-criteria

8
推荐指数
2
解决办法
2万
查看次数

收集表的Hibernate条件查询?

我有以下实体

@Entity
@Table(name = "rule")
public class Rule implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "rule_id")
    private Long id;

    @ElementCollection(targetClass = Action.class)


     @CollectionTable(name = "rule_action", joinColumns = @JoinColumn(name = "rule_id"))
        @Enumerated(value = EnumType.STRING)
        @Column(name = "action")
        private Set<Action> actions;

//After editing as per jbrookover's suggestion adding a new mapping
       @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
       @JoinColumn(name = "rule_id")
       private Set<RuleAction> ruleActions;


    }
Run Code Online (Sandbox Code Playgroud)

以下是我的行动

public enum Action {
    PHONE, EMAIL, POSTAL,PHONE_OR_EMAIL, SMS;
}
Run Code Online (Sandbox Code Playgroud)

我想获取一个规则列表,其中包含我正在尝试此操作的特定操作集

 DetachedCriteria criteria = DetachedCriteria.forClass(Rule.class,"rule");
 criteria …
Run Code Online (Sandbox Code Playgroud)

hibernate hibernate-criteria

8
推荐指数
1
解决办法
1万
查看次数

使用hibernate标准进行左连接

我有两个实体:IssueIssue_Tracker.我正在使用Hibernate 3.6.

SELECT `issues`.`issue_id`,
       `issues`.`issue_raised_date`,
       `issues`.`issue_description`,
       `issue_tracker`.`tracker_status`
FROM `issues`
   LEFT JOIN  `issue_tracker` ON `issues`.`issue_id` = `issue_tracker`.`issue_id`
WHERE `issues`.`status`="Escalate To"
Run Code Online (Sandbox Code Playgroud)

如何使用Hibernate Criteria实现这一点,最重要的是,我必须将它用于分页.

和My Dao如下显示jqgrid中的问题列表

public List showHelpDeskIssues(DetachedCriteria dc,int from,int size){

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
 try
  {

    Criteria criteria = dc.getExecutableCriteria(session);
    criteria.setFirstResult(from);
    criteria.setMaxResults(size);
    criteria.add(Restrictions.eq("status","Escalate To"));

    return criteria.list();
  }
  catch (HibernateException e)
  {
    e.printStackTrace();
    throw e;
  } }
Run Code Online (Sandbox Code Playgroud)

有关简要说明请参考此问题如何使用struts2在jqgrid中显示两个表数据 - jqgrid插件和hibernate 任何帮助都会很棒.

java mysql hibernate hibernate-criteria

8
推荐指数
2
解决办法
3万
查看次数

将SQL查询转换为休眠标准和预测

我从SQL查询:

select e.* 
from terminal_remote_deployment e
where id = (select top 1 e1.id
            from terminal_remote_deployment e1
            where e1.Terminal_info_id = e.Terminal_info_id
            order by e1.version desc
           );
Run Code Online (Sandbox Code Playgroud)

我试图在HQL中编写它,如下所示:

final StringBuilder hql = new StringBuilder();
            hql.append(" from TerminalRemoteDeployment e");
            hql.append(" where e.id = (Select TOP 1 e1.id from TerminalRemoteDeployment e1 where e1.terminalInfo.id = e.terminalInfo.id order by e1.version desc)");

            Query query = getEntityManager().createQuery(hql.toString());
            resultList = (List<TerminalRemoteDeployment>) query.getResultList();
Run Code Online (Sandbox Code Playgroud)

我遇到这种方法的错误.请帮我写一下hibernate的标准,因为我对此很新.

sql-server hibernate hql subquery hibernate-criteria

8
推荐指数
1
解决办法
274
查看次数

如何在 jpa 标准中执行 JOIN FETCH

我正在尝试将下面的查询转换为标准 api。

SELECT er from ereturn er JOIN FETCH product_item pi ON pi.ereturn_id = er.id WHERE pi.status = "RECEIVED"
Run Code Online (Sandbox Code Playgroud)

对于这样的事情:

CriteriaBuilder builder = em.getCriteriaBuilder();

CriteriaQuery<Ereturn> criteria = builder.createQuery( Ereturn.class );

Root<Ereturn> er = criteria.from(Ereturn.class);
Join<Ereturn, ProductItem> productItemJoin = er.join("productItems", JoinType.LEFT);
Fetch<Ereturn, ProductItem> productItemFetch = er.fetch("productItems", JoinType.LEFT);

List<Predicate> predicates = new ArrayList<>();

predicates.add(builder.equal( productItemJoin.get( "status" ), "RECEIVED"));

criteria.where(
        builder.and(predicates.toArray(new Predicate[predicates.size()]))
);

List<Ereturn> ers = em.createQuery( criteria )
    .getResultList();
Run Code Online (Sandbox Code Playgroud)

问题是休眠生成这个查询:

select
ereturn0_.id as ...
...
productite6_.id as ...
...
from
ereturn ereturn0_ …
Run Code Online (Sandbox Code Playgroud)

hibernate jpa join hibernate-criteria

8
推荐指数
2
解决办法
2万
查看次数

使用grails标准api定义OR条件

我有以下域对象:

class User {
    String name
    Transaction transaction

    static constraints = {
        transaction nullable: true
    }
}

class Transaction {        
    boolean successful
    User user        
    static belongsTo = User
}
Run Code Online (Sandbox Code Playgroud)

我想选择所有users没有成功交易的东西.这意味着我希望没有任何transaction(transaction == null)的用户和具有成功值false(transaction.successful == false)的事务的用户.我想使用Criteria API执行此操作(因为这可以与基于用户输入的其他条件结合使用).

我试过这个:

def c = User.createCriteria()
def results = c {
    or {
        isNull 'transaction'
        transaction {
            eq 'successful', false
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这只给了我有交易的用户(成功的价值false).但我没有得到交易所在的用户null

以下代码显示了我如何创建一些示例数据:

def createUserAndTransaction(String name, Boolean successful = null) {
    User u …
Run Code Online (Sandbox Code Playgroud)

grails grails-orm hibernate-criteria

7
推荐指数
1
解决办法
8822
查看次数