我有一个表T1(ID AUTOINCREMENT INT,COL1,COL2等)。
JPA Entity for T1有一个字段ID,已标记为@Generated和@Id。这是告诉JPA实体的密钥不是由应用程序设置的,并且DB将生成ID。 代码调用persist方法来保存实体。我不需要管理实体。
@Entity
@Table(name = "T1")
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "ID")
private Long customerd;
@Column(name = "COL1")
private String col1;
当我运行应用程序时,JPA似乎INSERT表中的行并立即选择要在对象中设置的生成的ID。
是否可以告诉JPA不要获取生成的ID?我希望JPA执行INSERT并忘记记录。
数据库是DB2。 JPA实现是Hibernate。
此致
佳日
答案 0 :(得分:1)
根据JPA规范,每个实体都必须具有主键 - 可以是简单主键或复合主键。这意味着您必须至少指定一个属性,以通过使用@Id或@EmbeddedId注释来指示它是您的实体的主键。 JPA提供程序将确保在持久调用期间,实体的生成ID将在Id注释属性中可用。 JPA提供程序将在事务提交之前或之后(取决于使用的生成策略)分配Id。无论使用何种策略,除非您自己手动设置Id属性,否则不会阻止JPA提供程序查询生成的Id并将其分配给您的实体。