我正在收集有关flush()方法的信息,但我不清楚何时使用它以及如何正确使用它.根据我的阅读,我的理解是持久化上下文的内容将与数据库同步,即发出未完成的语句或刷新实体数据.
现在,我得到下列设想两个实体A和B(在一比一的关系,而不是由JPA执行或模拟).A有一个复合PK,它是手动设置的,还有一个自动生成的IDENTITY字段recordId.这recordId应该B作为外键写入实体A.我正在保存A并B进行单笔交易.问题是自动生成的价值A.recordId是不可用的事务中,除非我做的一个显式调用em.flush()打完电话后em.persist()上A.(如果我有一个自动生成的IDENTITY PK,那么该值将在实体中直接更新,但这不是这里的情况.)
可以em.flush()在一个事务中使用时造成什么伤害?
我在显示数据库中的数据时出现问题.如果我更新一个对象,有时我会得到旧数据,有时候是新数据.更新功能运行良好(我可以在DB中看到正确的更新),而read函数似乎获得缓存数据.我试图禁用两个缓存,尝试在更新/保存期间打开和关闭会话,但它仍然无法正常工作.User和Store bean都有Lazy提取.谢谢!
阅读功能:
public static List<Store> getStoreByUser(User user)
throws HibernateException {
List<Store> result = null;
Session session = sessionFactory.getCurrentSession();
Transaction transaction = null;
try {
transaction = session.getTransaction();
Criteria criteria = session.createCriteria(Store.class);
criteria.add(Restrictions.eq("userUserID", user));
result = criteria.list();
} catch (HibernateException he) {
logger.error("No Store found for user: = " + user, he);
throw he;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
更新/保存功能:
public static Integer insertOrUpdateStore(Store store)
throws HibernateException {
Integer id = null;
Session session = sessionFactory.getCurrentSession();
Transaction transaction = null;
try …Run Code Online (Sandbox Code Playgroud) 我想知道有关提交的不同隔离级别,并且还想了解行级和表级锁.
hibernate ×2
caching ×1
database ×1
java ×1
jpa ×1
oracle ×1
persistence ×1
session ×1
transactions ×1