标签: hibernate-criteria

Hibernate Criteria Projection

正如问题标题所说,我试图制作一个投影标准,只查询几个表属性.

所以我有一个Person Table /类,它有大约40个属性.我希望我的标准获得动态数量的属性,比如10,11或12(SQL术语select firstname, lastname from person),我这样做:

Transaction tx = session.beginTransaction();
Criteria crit = session.createCriteria(Person.class);
crit.setCacheable(true);
ProjectionList projList = Projections.projectionList();
projList.add(Projections.property("id"));
Criterias c = null;
 for (int i = 0; i < checked.size(); i++) {
        Attribute attr = checked.elementAt(i);
        switch (attr) {
            case LASTNAME:
                projList.add(Projections.property("lastName"));
                c = enumMap.get(attr);
                if (c.isChanged()) {
                    String tmp = (String) c.getAnswer();
                    tmp = tmp.replace('*', '%');
                    crit.add(Restrictions.like("lastName", tmp));
                    crit.addOrder(Order.asc("lastName"));
                }
            case ...THE REST .....
            }
    crit.setProjection(projList);
    retList = crit.list();
    tx.commit();
    return retList;
Run Code Online (Sandbox Code Playgroud)

并且它返回 …

java hibernate criteria restrictions hibernate-criteria

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

Hibernate条件查询,它使用相关实体的主键来过滤结果

在我们的系统中,我们的数据库如下所示

一个代理商有很多经纪人,一个经纪人有很多用户,一个用户有很多订单.

我正在尝试使用hibernate标准来查找指定经纪商下的所有用户订单.在简单的SQL中,这将非常容易.我可以在条件api中执行此操作吗?我发现在使用点击和过滤器类型时,条件api工作得特别好,因为您可以构建一个非有序的限制列表并将它们添加到条件中.

目前我有这个不起作用

final Session session = (Session) entityManager.getDelegate();
    final Brokerage brokerage = userAdmin.loadBrokerage(brokerageId);
    @SuppressWarnings({"UnnecessaryLocalVariable", "unchecked"})
    final List<UserOrder> userOrders = session
            .createCriteria(UserOrder.class)
            .add(Restrictions.eq("user.brokerage", brokerage))
            .list();
Run Code Online (Sandbox Code Playgroud)

我收到消息"由以下原因引起:org.hibernate.QueryException:无法解析属性:user.brokerage:com.printlogix.rp.server.domain.UserOrder:".

你能将param名称传递给Restrictions.eq,如"object.parentobject.property"吗?

hibernate jpa hibernate-criteria

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

Grails hasMany:查找具有符合条件的子项的所有主记录

我有这个Grails的2.0.3项目,其中有两个型号DomainADomainB无一不是由相互关联的many-to-many关系,其中DomainB的一个孩子DomainA.

class DomainA {
  // properties
  static hasMany = [domains: DomainB]
}

class DomainB {
  // properties
  static hasMany = [domains: DomainA]
  static belongsTo = [DomainA]
}
Run Code Online (Sandbox Code Playgroud)

鉴于这种设计,我想查询所有DomainB其中存在DomainA以下查询集的实例DomainA.

def domainsList = DomainA.createCriteria().list() {
   // other criterions for the other properties
}
DomainB.createCriteria().list() {
   inList("domains", domainsList)
   // other criterions for the other properties
}
Run Code Online (Sandbox Code Playgroud)

执行上面的代码时,会出现错误提示,ERROR util.JDBCExceptionReporter - Parameter #1 has not been …

grails hibernate hibernate-criteria grails-domain-class

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

Java Hibernate @OneToMany Criteria Projections返回NULL

我有一对多关系所有者 - >狗.

我将通过ID查询狗以及以EAGER方式引入所有者我使用Hibernate 4.1.6设置此代码而不使用XML映射.我只需要来自DOG和OWNER的一些字段使用Projections Hibernate生成的SQL是完美的,但是我的对象没有填充,因为DOG返回填充的字段但是返回的所有者是 DOG.OWNER==NULL我到目前为止使用的代码...我的entities.other代码省略简洁

@Entity
public class Owner implements Serializable
{
    Set<Dog>dogs=new HashSet<Dogs>(0);
    @OneToMany(fetch=FetchType.LAZY, mappedBy="owner")
    public Set<Dogs> getDogs(){return this.dogs}    
}   

@Entity
public class Dog implements Serializable
{
    private Owner owner;    
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="ownerid")
    public Owner getOwner(){return this.owner;}
 }  
Run Code Online (Sandbox Code Playgroud)

这是我的方法.

public Dog getDogAndOwnerById(Integer dogId) 
{
    Projection p=Projections.projectionList()
    .add(Projections.property("d.id"),"id")
       .add(Projections.property("o.id"),"id");//and others fields
    Session session = getHibernateTemplate().getSessionFactory().openSession();        
    Criteria like = session.createCriteria(Dog.class,"d")
    .add(Restrictions.idEq(dogId)).setProjection(p)
    .setResultTransformer(Transformers.aliasToBean(Dog.class))
    .setFetchMode("owner",FetchMode.JOIN).createAlias("owner","o");        
    Dog dog = (Dog)like.uniqueResult();        
    //Object[]obj=(Object[])like.uniqueResult(); for(Object id:obj)System.out.println(id);
    //System.out.println(obj.length);
    session.close();
    return dog;
    //dog is OK …
Run Code Online (Sandbox Code Playgroud)

java hibernate projection resulttransformer hibernate-criteria

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

Hibernate:Criteria API与QueryDsl

我对Criteria API有一些经验,但我之前从未使用过QueryDsl.我想问的是使用QueryDsl而不是Criteria API有什么优点/缺点?特别是我想知道哪一个更适合大型数据库(我的意思是复杂的查询).

hibernate hibernate-criteria querydsl

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

hibernate.jpa.criteria.BasicPathUsageException:无法加入基本类型的属性

我有两张桌子:TaxTaxRule.两个表中都有一列相同,即TAX_RULE_ID.但是没有像OneToOne或那样的任何Hibernate映射OneToMany.这两张表看起来像 -

@Id
@Column(name = "TAX_RATE_ID")
private Long taxRateId;

@Column(name = "TAX_RULE_ID")
private Long taxRuleId;

@Column(name = "TAX_TYPE")
private String taxType;
Run Code Online (Sandbox Code Playgroud)

TAX_RULE

@Id
@Column(name = "TAX_RULE_ID")
private Long taxRuleId;

@Column(name = "TAX_CD")
private String TaxCode;

@Column(name = "STATE")
private String state;
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取密钥的数据,即TAX_RULE_ID.此列在两个表中都很常见.我有以下Hibernate代码,我在TAX_RULE_ID列中加入两个表,如下所示:

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<String[]> cQuery =        criteriaBuilder.createQuery(String[].class);
Root<Tax> taxRoot = cQuery.from(Tax.class);

cQuery.multiselect(taxRateRoot.get("taxType"), taxRateRoot.get("taxRate"));
List<Predicate> predicates = new ArrayList<>();
Join<Tax, TaxRule> …
Run Code Online (Sandbox Code Playgroud)

java oracle hibernate jpa hibernate-criteria

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

使用 Hibernate 防止 SQL 注入

我正在使用 Hibernate,我知道你可以使用 HQL 来防止 SQL 注入:

String query1 = "from Obj where id = "+ id;
String query2 = "from Obj where id = :id";
Run Code Online (Sandbox Code Playgroud)

query1是不安全的,query2也是安全的。

如何使用 Criteria 实现安全查询?这是否已经实施了还是我必须做其他事情?

Criteria c = session.createCriteria(Obj.class);
c.add(Restrictions.eq("id", 5));
Run Code Online (Sandbox Code Playgroud)

hibernate hibernate-criteria nhibernate-hql

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

标准 ORDER BY 日期不起作用?

你能帮我解决这个问题吗?我正在尝试按日期对条件查询的结果进行排序,但没有得到我需要的结果。我以字符串格式保存日期,如何使用条件按日期排序

我正在使用的代码是:

@Override
public List<Program> getListProgram() {
    Session session=sessionFactory.openSession();
    Criteria criteria=session.createCriteria(Program.class);
    criteria.addOrder(Order.asc("createdDate"));
    List<Program> programs=(List<Program>)criteria.list();
    return programs;
}
Run Code Online (Sandbox Code Playgroud)

结果是:

01/02/2009
03/01/2009
04/06/2009
05/03/2009
06/12/2008
07/02/2009
Run Code Online (Sandbox Code Playgroud)

结果应该是:

06/12/2008
03/01/2009
01/02/2009
07/02/2009
Run Code Online (Sandbox Code Playgroud)

我需要以上述格式选择日期。

非常感谢您的帮助。

java hibernate hibernate-criteria

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

使用休眠将所有记录从主表复制到克隆表

使用 SQL 我可以将数据从一个表复制到另一个镜像表。(例如insert into TABLE_EXAMPLE_COPY select * from TABLE_EXAMPLE;。如何使用 Hibernateorg.hibernate.Criteriaorg.hibernate.Queryor做同样的事情org.hibernate.SQLQuery

java hibernate hibernate-criteria

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

使用 CriteriaBuilder 在 Java 中获取列表的 IllegalStateException

总结一下,我有 3 个实体,主要的一个是名为“Rac”的实体。它包含一个“RacNatureza”列表,其中包含一个属性“Natureza”。

拉克

    @Entity
    @Table(name = "rac")
    public class Rac {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idRac;    

    @OneToMany(mappedBy = "rac", cascade = {CascadeType.ALL}, orphanRemoval = true)
    @JsonManagedReference //para evitar recursão infinita do JSON
    private List<RacNatureza> racNaturezas;

    //...getters and setters ok
}
Run Code Online (Sandbox Code Playgroud)

RacNatureza

@Entity
@Table(name = "rac_natureza")
public class RacNatureza implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_rac_natureza")
    private Long idRacNatureza;

    @ManyToOne
    @JsonBackReference //coloquei para evitar a recursao infinita de JSON
    @JoinColumn(name="id_rac")
    private Rac rac;

    @ManyToOne
    @JoinColumn(name="id_natureza") …
Run Code Online (Sandbox Code Playgroud)

java jpa criteria predicate hibernate-criteria

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