有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用保持相同标识符的JPA导入java数据

我开发了一个简单的web应用程序,它使用一些使用JPA的数据库表。假设表A和表B参考表A。我的应用程序在我的客户的不同环境中运行,如开发、测试和生产阶段。因此,我必须创建一个在这些环境之间导出/导入数据的流程

移动对象时,我希望保持相同的ID,因为我希望保持相同的引用。JPA有没有办法做到这一点

我正在使用Hibernate4.3.8和Oracle数据库。这是我的实体:

@Entity
@Table
public class Category
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
}

我正试图做到这一点:

Category category = new Category();
category.setId(1L);
category.setName("Test");

EntityManager em = PersistenceManager.getEntityManager();
em.merge(category);

但是它使用hibernate序列来生成ID,而不是使用给定的ID。如果我使用persist而不是merge,它会抛出一个异常,因为它是一个分离的对象

有办法吗


共 (1) 个答案

  1. # 1 楼答案

    是的,您可以使用定义的序列定义自定义id生成器

    您需要一个扩展org.hibernate.id.SequenceGenerator的类:

    package yourPackage;
    
    public class CustomGenerator extends SequenceGenerator
    {
        @Override
        public Serializable generate(SessionImplementor session, Object obj)
        {
            ...
        }
    }
    

    要在实体中使用自定义生成器:

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CustomGenerator")
    @GenericGenerator(name = "CustomGenerator",
            strategy = "yourpackage.CustomGenerator",
            parameters = {
                @Parameter(name = "sequence", value = "custom_id_sequence")
            })
    private Long yourId;