mysql - 使用 DetachedCriteria Hibernate 多个子查询

标签 mysql hibernate detachedcriteria

我想将此查询写入 HQL 中:

select DISTINCT * from transportation transp 
    inner join price p on p.transportationId = transp.transportationId 
    where p.sectionId = ( select sec.sectionId from section sec where sec.lineId = ( select l.lineId from line l where l.lineId = 1000000000) )

但是不知道写子查询。我知道我必须使用 DetachedCriteria。

另外一个问题: 如果我们可以在 native 查询中编写此查询(使用createSQLQuery),如何将返回的对象转换为运输实体?

谢谢

我的实体:

@Entity
@Table(name = "transportation")
public class Transportation implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "transportationId")
    private Integer id;

    @OneToMany(mappedBy = "transportation", fetch = FetchType.EAGER)
    @JsonBackReference(value = "price-transportation")
    private Set<Price> prices = new HashSet<Price>();
    ...
}

@Entity
@Table(name = "price")
public class Price implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "priceId")
    private Integer id;

    @ManyToOne(optional = false)
    @JoinColumn(name = "transportationId")
    @JsonManagedReference(value = "price-transportation")
    private Transportation transportation;
    ...
}

@Entity
@Table(name = "section")
public class Section implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "sectionId")
    private Integer id;

    @ManyToOne(optional = false)
    @JoinColumn(name = "lineId")
    @JsonManagedReference
    private Line line;
    ...
}


@Entity
@Table(name = "line")
public class Line implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "lineId")
    private Integer id;

    @OneToMany(mappedBy = "line", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JsonBackReference
    private Set<Section> sections = new HashSet<Section>();
    ...
}

最佳答案

我通过使用 .addEntity(Transportation.class) 解决了我的问题,如下所示:

String query = "select DISTINCT * from moyen_transport transp"
                + " join prix_voyage p on p.ID_MoyenTransport = transp.ID_MoyenTransport"
                + " where p.ID_Troncon = ( select t.ID_Troncon from troncon t where t.ID_Troncon = ( select l.ID_Ligne from ligne l where l.ID_Ligne = 1000000000) )";
Query result = getSession().createSQLQuery(query).addEntity(Transportation.class)**;
List<Transportation> results = result.list();

关于mysql - 使用 DetachedCriteria Hibernate 多个子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46133556/

相关文章:

mysql - Python 3 MySQL GPS跟踪器数据库插入错误

java - Spring Roo JPA - 为什么手动数据库更新在持久性上下文中自动可用?

java - 为什么我运行 spring 和 Hibernate 项目时未创建数据库或表

c# - 是否可以对依赖于 NHibernate 分离条件的方法进行单元测试?

grails - 有没有更简洁,更Grailsy的方式来编写此查询?

java - 根据另一个字符串删除字符串的一部分

Mysql父id子id关系

sql - 使用grails和gorm执行嵌套选择

java - 使用 mySQL 从 Spring Boot 启动时,Javers 给出重复的键名称 'jv_global_id_owner_id_fk_idx'

mysql - 如何制作将生成 SQL 的 HQL 以在一个语句中插入多个值?