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模式