Java 休眠数据获取

Java 休眠数据获取,java,hibernate,Java,Hibernate,以下是我获取数据的方法: public static List<SubjectSubjectUsersUsers> getAllSubjectUsers() { List<SubjectSubjectUsersUsers> theList = null; Session session = ServiceLocator.getSessionFactory().openSession(); try{

以下是我获取数据的方法:

public static List<SubjectSubjectUsersUsers> getAllSubjectUsers()
    {
        List<SubjectSubjectUsersUsers> theList = null;

        Session session = ServiceLocator.getSessionFactory().openSession();

        try{

            theList = session.createSQLQuery("SELECT s.name as subject_name, u.name as user_name, u.surname as user_surname, su.id as id from subjects s "
                    + "join subject_users su on s.id = su.subject_id join users u on su.user_id = u.id")

                    .addScalar("subject_name", StandardBasicTypes.STRING)
                    .addScalar("user_name", StandardBasicTypes.STRING)
                    .addScalar("user_surname", StandardBasicTypes.STRING)
                    .addScalar("id", StandardBasicTypes.LONG)
                    .setResultTransformer(Transformers.aliasToBean(SubjectSubjectUsersUsers.class)).list();


        }catch(Exception e){

            e.printStackTrace();

        }finally{

            session.flush();
            session.close();

        }


        return theList;
    }
公共静态列表getAllSubjectures()
{
List-theList=null;
会话会话=ServiceLocator.getSessionFactory().openSession();
试一试{
theList=session.createSQLQuery(“选择s.name作为主题名,选择u.name作为用户名,选择u.name作为用户名,选择su.id作为主题的id”
+“加入主题用户su on s.id=su.subject\u id加入用户u on su.user\u id=u.id”)
.addScalar(“主题名称”,StandardBasicTypes.STRING)
.addScalar(“用户名”,StandardBasicTypes.STRING)
.addScalar(“用户姓氏”,StandardBasicTypes.STRING)
.addScalar(“id”,StandardBasicTypes.LONG)
.setResultTransformer(Transformers.aliasToBean(subjectSubjectArchitectureSusers.class)).list();
}捕获(例外e){
e、 printStackTrace();
}最后{
session.flush();
session.close();
}
返回列表;
}
问题是,当我在数据库中手动更新数据时,所获取的数据不会更改。但当我重新加载服务器和IDE时,它就工作了。问题的原因可能是什么?我想我使用session对象的方式不正确。谢谢。

您需要设置为刷新

query.setCacheMode(CacheMode.REFRESH);
您的查询将如下所示-

theList = session.createSQLQuery("SELECT s.name as subject_name, u.name as user_name, u.surname as user_surname, su.id as id from subjects s "
                    + "join subject_users su on s.id = su.subject_id join users u on su.user_id = u.id")

                    .setCacheMode(CacheMode.REFRESH)
                    .addScalar("subject_name", StandardBasicTypes.STRING)
                    .addScalar("user_name", StandardBasicTypes.STRING)
                    .addScalar("user_surname", StandardBasicTypes.STRING)
                    .addScalar("id", StandardBasicTypes.LONG)
                    .setResultTransformer(Transformers.aliasToBean(SubjectSubjectUsersUsers.class)).list();

但是,在使用hibernate时从outsite更新DB是个坏主意,否则您将无法从hibernate缓存中获得好处。

您使用的是二级缓存吗?