Java 将HQL中的子选择器安装在弹簧上
我正在用Hibernate学习SpringMVC,遇到了以下情况 我有一个与服务相关的费率卡,其中最后注册的价格是服务的当前价格,并开发了sql代码以获得如下结果: 我的数据库如下所示: 我在HQL Java方法中需要的SQL: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
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
}