分离实体上的JPA merge()在存在时进行插入

用户名

我与休眠提供程序一起使用JPA。这是我的零件代码:

@Entity
@IdClass(xxxPK.class)
@NamedQueries({
...
})
@Inheritance(strategy = InheritanceType.JOINED)
public class xxx extends AbstractEntity {

public static final String GET_TRADES = "getInstruments";
public static final String GET_STRUCTURE = "getStructure";
public static final String GET_ALL = "getAllTrades";

@Column(nullable = false)
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "xxx")
@SequenceGenerator(name = "xxxx", sequenceName = "xxxxS", allocationSize = 1)
private Long systemId;

@Id
@Column(nullable = false)
private Integer version;
 //////

还有一个后代:

@Entity
@PrimaryKeyJoinColumns(
    {
            @PrimaryKeyJoinColumn(name = "systemId"),
            @PrimaryKeyJoinColumn(name = "version")
    }
)
public class YYY extends xxx {
 //////

我创建了一个YYY实例,并且persiti是我所期望的。之后,我在db中的每个表中每一行:

fx = Persistence.invoke(new Persistence.Invoke<YYY>() {
            @Override
            public YYY run(EntityManager em) {
                BufferedReader reader = null;
                try {
                    reader = new BufferedReader(new FileReader(new ClassPathResource("json/XXX_from.json").getFile()));
                } catch (IOException ex) {
                    System.out.print("File is not found");
                }
                YYYfx = (YYY) EntityConverter.getConverter(YYY.class).fromJson(reader);
                em.persist(fx);
                return fx;
            }
        });

因此,在将fx分离并作为SPEC之后。表示我可以通过调用merge()使它在另一个会话中持久存在,因此可以调用它,但:

Persistence.invoke(new Persistence.Invoke<Object>() {
    @Override
    public Object run(EntityManager em) {
        fx.setZZZ("A");
        em.merge(fx);
        return null;
    }
});

之后,我在XXX和YYY表中又有了新的主行。看起来provider会将fx当作TRANSIENT而不是DETACHED来接受,然后说确定-这是一个新对象,我将其插入。我不知道该怎么办,我在这种愚蠢的情况下损失了4个小时。请帮忙!

public class Persistence {

    private static EntityManagerFactory emf;

    public static EntityManagerFactory getEmf() {
        return emf;
    }

    public void setEmf(EntityManagerFactory emf) {
        Persistence.emf = emf;
    }

    public static <T> T invoke(Invoke<T> inv) {
        T result = null;
        EntityManager em = getEmf().createEntityManager();
        EntityTransaction transaction = em.getTransaction();
        transaction.begin();
            try {
            result = inv.run(em);
            transaction.commit();
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            em.close();
        }
        return result;
    }

    public interface Invoke<T> {
        public T run(EntityManager em);
    }

}
艾伦·海伊(Alan Hay)

请参阅API:

https://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#merge(T)

返回:状态被合并到的托管实例

因此,从您的第一个电话:

return em.persist(fx);

http://www.objectdb.com/java/jpa/persistence/detach

可以使用merge方法将分离的对象附加到任何EntityManager:

将指定的分离实体对象的内容复制到具有相同标识(即相同类型和主键)的现有管理实体对象中。如果EntityManager不管理这样的实体对象,则将构造一个新的管理实体对象。但是,分离的对象本身保持不变并分离

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

收到具有ID的实体时,Hibernate Session#merge是否应该插入?

来自分类Dev

当实体停止在JPA中进行管理时

来自分类Dev

映射到实体时的JPA异常

来自分类Dev

在JPA中将分离的实体合并到实体管理器的最佳方法是什么

来自分类Dev

保存子数据时传递的分离实体可持久保存

来自分类Dev

JPA:分离附加的只读实体的列表

来自分类Dev

当分离的实体版本属性为null时,为什么Hibernate实体管理器执行插入而不是更新?

来自分类Dev

JPA实体和查询的编译时检查

来自分类Dev

JPA实体在Ubuntu上进行了更新,但在Windows上引发了乐观锁定异常

来自分类Dev

merge()后无法删除分离的实体

来自分类Dev

分离的实体在POST时传递为持久化

来自分类Dev

如何还原分离实体上的更改

来自分类Dev

Spring Data JPA分离实体回到上下文

来自分类Dev

Spring Data JPA分离实体回到上下文

来自分类Dev

jpa hibernate:分离的实体传递给持久化

来自分类Dev

持久存储分离的实体时,Spring Data JPA审计失败

来自分类Dev

春天JPA与Hibernate手柄空子实体时,外键连接存在

来自分类Dev

基于jpa实体的表中是否存在if的可选jpa属性

来自分类Dev

JPA实体不具有表中的列,但基于实体中不存在的列进行查询

来自分类Dev

OpenJPA:分离EntityManager.close()上的所有实体

来自分类Dev

收到具有ID的实体时,Hibernate Session#merge是否应该插入?

来自分类Dev

JAX-RS上的JAXB-具有关系的JPA实体在日志上不返回JSON HTTP 500时没有错误(Glassfish)

来自分类Dev

在JPA中将分离的实体合并到实体管理器的最佳方法是什么

来自分类Dev

在分离的实体上调用jpapersist不会插入重复的行。为什么?

来自分类Dev

Spring Data JPA分离实体回到上下文

来自分类Dev

在实体中使用嵌入式类时传递的分离实体可以持久化

来自分类Dev

JPA创建实体时,使用JPA进行的Elasticsearch休眠搜索无法自动创建索引

来自分类Dev

插入连接表实体时不允许Spring JPA NULL

来自分类Dev

如何使用不直接在实体 hibernate spring JPA 上的属性进行 findBy 操作

Related 相关文章

  1. 1

    收到具有ID的实体时,Hibernate Session#merge是否应该插入?

  2. 2

    当实体停止在JPA中进行管理时

  3. 3

    映射到实体时的JPA异常

  4. 4

    在JPA中将分离的实体合并到实体管理器的最佳方法是什么

  5. 5

    保存子数据时传递的分离实体可持久保存

  6. 6

    JPA:分离附加的只读实体的列表

  7. 7

    当分离的实体版本属性为null时,为什么Hibernate实体管理器执行插入而不是更新?

  8. 8

    JPA实体和查询的编译时检查

  9. 9

    JPA实体在Ubuntu上进行了更新,但在Windows上引发了乐观锁定异常

  10. 10

    merge()后无法删除分离的实体

  11. 11

    分离的实体在POST时传递为持久化

  12. 12

    如何还原分离实体上的更改

  13. 13

    Spring Data JPA分离实体回到上下文

  14. 14

    Spring Data JPA分离实体回到上下文

  15. 15

    jpa hibernate:分离的实体传递给持久化

  16. 16

    持久存储分离的实体时,Spring Data JPA审计失败

  17. 17

    春天JPA与Hibernate手柄空子实体时,外键连接存在

  18. 18

    基于jpa实体的表中是否存在if的可选jpa属性

  19. 19

    JPA实体不具有表中的列,但基于实体中不存在的列进行查询

  20. 20

    OpenJPA:分离EntityManager.close()上的所有实体

  21. 21

    收到具有ID的实体时,Hibernate Session#merge是否应该插入?

  22. 22

    JAX-RS上的JAXB-具有关系的JPA实体在日志上不返回JSON HTTP 500时没有错误(Glassfish)

  23. 23

    在JPA中将分离的实体合并到实体管理器的最佳方法是什么

  24. 24

    在分离的实体上调用jpapersist不会插入重复的行。为什么?

  25. 25

    Spring Data JPA分离实体回到上下文

  26. 26

    在实体中使用嵌入式类时传递的分离实体可以持久化

  27. 27

    JPA创建实体时,使用JPA进行的Elasticsearch休眠搜索无法自动创建索引

  28. 28

    插入连接表实体时不允许Spring JPA NULL

  29. 29

    如何使用不直接在实体 hibernate spring JPA 上的属性进行 findBy 操作

热门标签

归档