相关疑难解决方法(0)

在JPA/Hibernate中正确使用flush()

我正在收集有关flush()方法的信息,但我不清楚何时使用它以及如何正确使用它.根据我的阅读,我的理解是持久化上下文的内容将与数据库同步,即发出未完成的语句或刷新实体数据.

现在,我得到下列设想两个实体AB(在一比一的关系,而不是由JPA执行或模拟).A有一个复合PK,它是手动设置的,还有一个自动生成的IDENTITY字段recordId.这recordId应该B作为外键写入实体A.我正在保存AB进行单笔交易.问题是自动生成的价值A.recordId是不可用的事务中,除非我做的一个显式调用em.flush()打完电话后em.persist()A.(如果我有一个自动生成的IDENTITY PK,那么该值将在实体中直接更新,但这不是这里的情况.)

可以em.flush()在一个事务中使用时造成什么伤害?

java persistence hibernate jpa transactions

107
推荐指数
3
解决办法
15万
查看次数

EntityManager.flush做了什么以及为什么需要使用它?

我有一个EJB,我将对象保存到数据库.在我看到的一个例子中,一旦保存了这个数据(EntityManager.persist),就会调用EntityManager.flush(); 为什么我需要这样做?我保存的对象没有附加,以后不在方法中使用.事实上,一旦保存,方法返回,我希望资源被释放.(示例代码也会在删除调用中执行此操作.)

if (somecondition) {
    entityManager.persist(unAttachedEntity);
} else {
    attachedEntityObject.setId(unAttachedEntity.getId());
}
entityManager.flush();
Run Code Online (Sandbox Code Playgroud)

java jpa entitymanager

58
推荐指数
5
解决办法
10万
查看次数

我们如何才能获得JPA EntityManager Flush工作

我的问题是为什么冲洗不起作用:

public void ejbService(){
   Customer c = em.find(Customer.class,1);
   c.setName("newName");
   em.flush();
   //at this point when I query mysql table I can not see "newName"


   thread.sleep(10000);

   c.setName("anotherName");
}
Run Code Online (Sandbox Code Playgroud)

完成方法后,我在db中看到"anotherName",我也用em.find(Customer.class,1,Lock.None)检查它; 但仍然不行

RGDS

java jpa transactions entitymanager

17
推荐指数
1
解决办法
2万
查看次数

在这种情况下是否需要调用flush()(JPA接口)?

因为调用flush()来使每个实体从内存持久存储到数据库.因此,如果我使用调用太多不必要的flush(),则可能需要很长时间,因此不是性能的好选择.这是一个我不知道何时调用flush()的场景?

//Order and Item have Bidirectional Relationships
Order ord = New ord("my first order");
Item item = New Item("tv",10);

//...process item and ord object

em.persist(ord);//em is an instance of EntityManager
em.flush();// No.1 flush()

item.setOrder(ord);
em.persist(item);

Set<Item> items= new HashSet<Item>();
items.add(item);
ord.setItems(items);

em.flush();// No.2 flush()
Run Code Online (Sandbox Code Playgroud)

我的问题是:拨打第1号同花顺是否可以避免?

我担心的是:为了执行item.setOrder(ord),我们需要一个ord的数据库ID.并且只调用em.persist(ord)无法生成数据库ID,因此我必须在item.setOrder(ord)之前调用em.flush().那么你们的观点是什么?

提前致谢.

java hibernate jpa flush entitymanager

10
推荐指数
1
解决办法
1万
查看次数

JPA flush vs commit

在JPA中,如果我们调用EntityTransaction.commit(),它会自动调用EntityManager.flush()吗?或者我们应该叫他们俩?有什么不同?因为我有JPA的问题,当我将实体插入数据库时​​,我调用persist().在数据库中,数据已被插入(可以获取),但该数据不会显示在我的应用程序中(我使用findAll()获取它).它出现在另一个实体上.有什么我不知道的吗?我正在使用标准的Spring CRUD,JPA resource_local和postgresql.对不起我的英文,提前谢谢

java postgresql spring jpa

5
推荐指数
3
解决办法
2万
查看次数

有关在调用查询之前使用JPA进行刷新的问题

只是一个简单的问题,但是这段代码中需要刷新吗?请注意,这将在JPA事务中.

User user = new User();
em.persist(user);

em.flush;

User aUser = em.find(User.class,user.getId());
assert(user.equals(aUser));
Run Code Online (Sandbox Code Playgroud)

或者没有冲洗它会工作吗?

User user = new User();
em.persist(user);

User aUser = em.find(User.class,user.getId());
assert(user.equals(aUser));
Run Code Online (Sandbox Code Playgroud)

或者相同的问题,但更多涉及的例子:

User user = em.find(User.class,id);
user.setName("My Name");
em.merge(user);

em.flush; //Is this line needed?

User aUser = em.createQuery("select u from User where u.name = 'My Name');
assert(user.equals(aUser));
Run Code Online (Sandbox Code Playgroud)

java jpa transactions flush

3
推荐指数
1
解决办法
4753
查看次数