Java 将HQL中的子选择器安装在弹簧上

Java 将HQL中的子选择器安装在弹簧上,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,我正在用Hibernate学习SpringMVC,遇到了以下情况 我有一个与服务相关的费率卡,其中最后注册的价格是服务的当前价格,并开发了sql代码以获得如下结果: 我的数据库如下所示: 我在HQL Java方法中需要的SQL: select s.*, (select ps.price from priceServices ps where ps.idService = s.id order by ps.dateRegister DESC limit 1) as currentPr

我正在用Hibernate学习SpringMVC,遇到了以下情况

我有一个与服务相关的费率卡,其中最后注册的价格是服务的当前价格,并开发了sql代码以获得如下结果:

我的数据库如下所示:

我在HQL Java方法中需要的SQL:

select s.*,
(select ps.price 
 from priceServices ps 
 where ps.idService = s.id 
 order by ps.dateRegister DESC limit 1) as currentPrice 
from service s
Java类:

@Entity
@Table(name = "service")
public class Service  {
    /****/
    @OneToMany(mappedBy="service",
            cascade= CascadeType.ALL,
            fetch = FetchType.LAZY)
    private List<PriceServices> prices;
}
// ......
@Entity
@Table(name = "priceServices")
public class PriceServices  {
    /****/
    @Id
    @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE,
             CascadeType.DETACH, CascadeType.REFRESH})
    @JoinColumn(name = "idService")
    private Service service;
}
// ......
@Repository
public class ServiceDaoImpl implements ServiceDao {

    @Autowired
    private SessionFactory sessionFactory;

    protected Session getCurrentSession() {
        return sessionFactory.getCurrentSession();
    }

    @Override
    public List<Service> findAll() {
        return this.getCurrentSession().createQuery("from Service", Service.class).getResultList();
    }
}
@实体
@表(name=“service”)
公务舱服务{
/****/
@OneToMany(mappedBy=“服务”,
cascade=CascadeType.ALL,
fetch=FetchType.LAZY)
私人标价;
}
// ......
@实体
@表(name=“priceServices”)
公共类价格服务{
/****/
@身份证
@manytone(cascade={CascadeType.PERSIST,CascadeType.MERGE,
CascadeType.DETACH,CascadeType.REFRESH})
@JoinColumn(name=“idService”)
私人服务;
}
// ......
@存储库
公共类ServiceDaoImpl实现ServiceDao{
@自动连线
私人会话工厂会话工厂;
受保护的会话getCurrentSession(){
返回sessionFactory.getCurrentSession();
}
@凌驾
公共列表findAll(){
返回此.getCurrentSession().createQuery(“从服务”,Service.class).getResultList();
}
}
我当前正在显示一个包含服务的表,最后显示一个“info”按钮,当用户单击此按钮时,我会使用ajax搜索服务的价格

但是,我想在表中显示服务的当前值,在本课程中,示例是基本的。
我是否必须使用条件或NamedQuery才能在findAll()中进行子选择?

我在论坛的另一篇帖子中找到了答案。如果有人也像我一样需要帮助,我会留下答案。 HQL并没有像我所需要的那样实现MySQL限制函数,所以一个解决方案是使用纯SQL本身

这是链接:

在我的ServiceDaoImpl类中,我创建了以下方法:

public List<Service> findAllWithPrice() {
        NativeQuery<Service> query = this.getCurrentSession().createSQLQuery("select s.*, (select ps.price from priceServices ps where ps.idService = s.id order by ps.dateRegister DESC limit 1) as currentPrice from service s");
        query.addEntity( Service.class );

        return query.getResultList();
    }
@Entity
@Table(name = "service")
public class Service  {
    /****/
    private float currentPrice;

    // Getter and Setter of currentPrice
}