标签: resulttransformer

在Hibernate中使用本机SQL查询将结果集添加到DTO中

我有一个如下查询

select f.id, s.name, ss.name
from first f
left join second s on f.id = s.id
left join second ss on f.sId = ss.id
Run Code Online (Sandbox Code Playgroud)

如果我可以使用HQL,我会使用HQL构造函数语法直接用结果集填充DTO.但是,由于hibernate不允许左连接而没有关联,我必须使用Native SQL Query.

目前,我循环遍历JDBC样式的结果集并填充DTO对象.有没有更简单的方法来实现它?

java orm hibernate resulttransformer native-sql

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

如何在加载特定父项或其他映射实体属性时修改HQL转换器?

这是一个重要的补充,特别是在能够编写高效的动态HQL查询时解决性能问题.

但是,如果加载特定父项或另一个映射实体属性,我们如何修改HQL转换器?

以下代码:

session.createQuery(
    "select st.stNumber as stNumber, st.stDate as stDate "
    + " from SomeTable st "
    + " where st.someTableId < 1000")
    .setResultTransformer( Transformers.aliasToBean(database.SomeTable.class))
.list();
Run Code Online (Sandbox Code Playgroud)

工作正常,但如果我只想加载一些父母的属性怎么办?

例如,让我们说,SomeTable有一个父母被叫SomedParent,我想只访问这个父母的一个字段?

session.createQuery(
    "select st.stNumber as stNumber, st.stDate as stDate, st.someParent.someParentField as someParentField "
    + " from SomeTable st "
    + " where st.someTableId < 1000")
    .setResultTransformer( Transformers.aliasToBean(database.SomeTable.class))
.list();
Run Code Online (Sandbox Code Playgroud)

那么任何想法?

hibernate hql resulttransformer

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

NHibernate的预测

假设在一个实体中有属性id,用户名,年龄,地址.现在我只想要id和用户名,我使用这个代码.

预测允许从查询中返回除实体列表之外的其他内容.

var proj = Projections.ProjectionList()
    .Add(Projections.Property("Id"), "Id")
    .Add(Projections.Property("Username"), "Username");

var list2 = DetachedCriteria.For<User>()
    .Add(Expression.Eq("Username", "lachlan"))
    .GetExecutableCriteria( sessionFactory.GetCurrentSession())
    .SetProjection( proj )
    .List();
Run Code Online (Sandbox Code Playgroud)

我将如何检索值.在哪个对象中将采用这些值.

nhibernate projection resulttransformer

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

使用带有 ResultTransformer 的 DTO 投影的实体图返回空值

你好,我是 jpa + criteria API + hibernate 的新手。

我对 jpa 标准 API 中 ResultTransformer 的使用存有疑问。

我有两个实体“部门”和“员工”。部门和员工之间的一对多映射。我想使用带有 DTO 投影的实体图

1. 部门

@Entity
@NamedEntityGraph(name = "departmentWithEmployee", attributeNodes = @NamedAttributeNode("setOfEmployee"))
@Table(name = "tblDepartment")
public class Department {

    @Id
    private String id;

    private String name;

    @OneToMany(mappedBy = "department")
    private Set<Employee> setOfEmployee;

    //....getter & setter

}
Run Code Online (Sandbox Code Playgroud)

2. 员工

@Entity
@Table(name = "tblEmployee")
public class Employee {

    @Id
    private String id;

    @ManyToOne
    @JsonIgnore
    private Department department;

    private String firstName;

    private String lastName;

    //...getter & setter

} …
Run Code Online (Sandbox Code Playgroud)

spring resulttransformer criteria-api spring-data-jpa entitygraph

6
推荐指数
0
解决办法
1624
查看次数

使用ResultSetTransformer进行NHibernate Future Query

我正在尝试使用nhibernate查询任意sql数据,只要我不使用Futures功能就可以正常工作,但是,当我使用Futures时,数据不会传递到ResultSetTransformer中.

示例代码:

public class TestResultSetTransformer : IResultTransformer
{
    public object TransformTuple(object[] tuple, string[] aliases)
    {
        return tuple;
    }

    public IList TransformList(IList collection)
    {
        return collection;
    }
}
public void Foo(ISession sess){
        var x = sess.CreateSQLQuery("select * from MailEvent").SetResultTransformer(new TestResultSetTransformer()).Future<object[]>();
        var xprime = sess.CreateSQLQuery("select * from MailEvent").SetResultTransformer(new TestResultSetTransformer()).List<object[]>();
        foreach(var y in x)
        {

        }
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,期货查询返回一个具有正确行数的空对象数组列表,当我调试它时,object []元组为空,但是对于列表查询,它按预期工作.

nhibernate resulttransformer

5
推荐指数
1
解决办法
1693
查看次数

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
查看次数