spring休息服务-休眠模式-注释-pojo-namedqueries
问题内容:
我有一个pojo,其中包含一些命名查询以获取数据。
@NamedQueries({
@NamedQuery(name="abc", query="test")
})
@Entity
@Table(name = "MY_TABLE")
public class MyTable implements java.io.Serializable{
private long id;
private String name;
...........
我必须从服务层方法内部访问此命名查询的结果。因此,我尝试将hibernate会话工厂自动连接到服务层类中。
@Service
public class MyServiceClass{
@Autowired
SessionFactory sessionFactory;
..........
public void myMethod() {
Session session = acceSessionFactory.getCurrentSession();
Query query = session.getNamedQuery("abc").setInteger("id", 1).setString("name", "testname");
MyTable mytablerow = (MyTable) query.uniqueResult();
.......
}
但是在上述方法中-我认为我们在服务层中具有dao层逻辑。这是访问命名查询的正确方法吗?
注意:我没有上面的MyTable类的DAO接口或类。
问题答案:
在您的方法中,您实际上没有DAO层。 使用DAO的服务层的通用方法是
@NamedQueries({
@NamedQuery(name="abc", query="test")
})
@Entity
@Table(name = "MY_TABLE")
public class MyTable
@Repository
public class MyTableDAOImpl implements MyTableDAO
@Autowire
protected SessionFactory sessionFactory;
public MyTable myMethod1() {
Query query = session.getNamedQuery("abc")
.setInteger("id",1).setString("name", "testname");
return (MyTable) query.uniqueResult();}
public MyTable myMethod2() { ...}
@Service
public class MyTableServiceImpl implements MyTableService
@Autowire
protected MyTableDAO myTableDAO;
public MyTable myMethodService() {
//Some logic
...
return myTableDAO.myMethod1()
}
我建议您考虑使用GenericDAO模式