我使用了一个名为'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;
.
.
.
}