Hibernate从MySQL数据库返回旧数据,但不从Oracle数据库返回

时间:2017-05-30 04:08:43

标签: java mysql oracle hibernate

我使用了一个名为'assignSection(SectionBean bean)'的函数,该函数用于在WB_USERROLE_SECTION表中添加或删除一个部分。为了检查为WB_USERROLE_SECTION表中的给定用户角色和机构分配的当前部分项,我每次调用后都调用另一个名为“ getSectionList(String userRole,String institute)”的函数assignSection(SectionBean bean)'函数。我的'assignSection(SectionBean bean)'函数运行正常,但问题出在' getSectionList(String userRole,String institute)'功能

这是“getSectionList(String userRole,String institute)”函数的代码。

public List<Section> getSectionList(String userRole, String institute) throws Exception {
    List<Section> sectionList = new ArrayList<Section>();
    Session session = null;
    try {
         session = HibernateInit.sessionFactory.openSession();
         String sql = "from Section as t where t.status.statuscode=:status and t.institute=:institute and sectioncode in (select mp.id.sectioncode from Userrolesection mp where mp.id.userrolecode=:userrolecode and mp.institute=:institute ) order by lower(t.description) asc";
         Query query = session.createQuery(sql).setString("status", "1")
                        .setString("userrolecode", userRole)
                        .setString("institute", institute);
         sectionList = (List<Section>) query.list();
     }catch(Exception e) {
         throw e;
     } finally {
         try {
             session.flush();
             session.close();
         }catch(Exception e) {
             throw e;
         }
     }
    return sectionList;
}

这是问题,

此函数适用于Oracle数据库,并返回为该特定用户角色和WB_USERROLE_SECTION表的机构分配的正确名称列表。但是当我将这个函数用于MySQL数据库时,它有时工作正常,但有时它会返回旧数据,这与当时WB_USERROLE_SECTION表中的数据不同。

例如,

'assignSection(SectionBean bean)'函数,删除名为“sample_section”的部分。但是当我调用getSectionList(String userRole,String institute)“函数来检查当前节条目的列表时,它还包含”sample_section“,尽管它已经从表WB_USERROLE_SECTION中删除了。

我觉得数据列表是从缓存中返回的,但我已经使用了 org.hibernate.cache.NoCacheProvider  在我的hibernate.cfg.xml中,根据我的知识,我还没有为这个应用程序启用查询缓存。

我找到了一个解决方案,我在一个事务中完成了这个操作,它返回了正确的数据列表。此外,我只是尝试使用无状态会话,它也返回了我正确的数据。

我想知道的是“这种行为可能是什么原因?”对于oracle工作正常,但对MySQL不起作用?根据我的知识,您不需要使用事务从数据库中检索数据,但在这里我必须使用事务来获取正确的数据?

这是映射类&#34; Section&#34;

@Entity
@Table(name = "WB_SECTION"
)
public class Section implements java.io.Serializable {

    private String sectioncode;
    private String description;
    private Status status;
    private Institute institute;
.
.
.
}

这是映射类&#34; Userrolesection&#34;

@Entity
@Table(name = "WB_USERROLE_SECTION"
)
public class Userrolesection implements java.io.Serializable {

    private UserrolesectionId id;
    private Section section;
    private Userrole userrole;
    private Institute institute;
.
.
. 
}

这是映射类&#34; UserrolesectionId&#34;

@Embeddable
public class UserrolesectionId  implements java.io.Serializable {

     private String sectioncode;
     private String userrolecode;
.
.
. 
}

0 个答案:

没有答案