代码之家  ›  专栏  ›  技术社区  ›  Jaka Jančar

jpa:id列可自动和手动设置

  •  3
  • Jaka Jančar  · 技术社区  · 17 年前

    我使用的是MySQL,并有以下实体:

    class MyEntity {
        @Id
        @GeneratedValue(strategy=IDENTITY)
        @Column(name="id")
        private Integer id;
    }
    

    但是,我仍然希望能够手动设置ID!

    问题是insert永远不会插入id列。例如,当 这样做:

    MyEntity e = new MyEntity();
    e.setId(15);
    em.persist(e);
    em.flush();
    em.refresh(e);
    

    将进行以下查询:

    INSERT INTO myEntities (col1, col2, col3) VALUES (?, ?, ?)
    SELECT id, col1, col2, col3 FROM myEntities WHERE (id = 15)
    

    因此,ID仍然是自动生成的,并且 refresh() 将 导致 EntityNotFoundException .

    如果我不设置 @GeneratedValue 不管怎样,这个案子会成功的。 但是当值自动生成时, LAST_INSERT_ID() 不会被叫来的。

    是否可以手动和 自动,就像在MySQL中一样?

    2 回复  |  直到 17 年前
        1
  •  2
  •   DataNucleus    17 年前

    JPA不适合这种情况(JDO也不适合);它假定您要么自己设置ID,要么使用提供的生成器生成ID。 DataNucleus 通过添加扩展名 @扩展(key=“strategy when notnull”,value=“true”) 它将在您没有设置“id”值时生成该值,并在提供该值时使用该值。也许其他实现也允许类似的东西?

    --安迪(数据核)

        2
  •  0
  •   Jaka Jančar    17 年前

    使用EclipseLink,手动分配ID将用于基于表的排序和序列对象排序,但不用于标识。