如何使用 @GeneratedValue(strategy = GenerationType.AUTO) 创建对象

Posted

技术标签:

【中文标题】如何使用 @GeneratedValue(strategy = GenerationType.AUTO) 创建对象【英文标题】:how to create object with @GeneratedValue(strategy = GenerationType.AUTO) 【发布时间】:2018-09-28 03:17:01 【问题描述】:

我是 Java EE 的新手,现在我对创建实体 Transactiontype 的新对象有一些疑问。 TransactionType entity class 如您所见,我创建了一对多关系(一种交易类型可以有零次或多次付款),我为 transactionType 分配了两个属性:id(autogeneration) 和 transactionType(String)。 还有一组付款,我想知道: 1.我只是在transactionType表中添加了id和transactionType,如何创建一个对象而不添加任何付款? 2.我这里创建对象的时候如何传递自动生成的值-->id?

抱歉这些愚蠢的问题我真的无法弄清楚。

【问题讨论】:

【参考方案1】:

首先使用 JPA 将 Java 对象映射到 SQL 表的行,反之亦然。

    当您在 id 参数上添加 @GeneratedValue 注释时,JPA 会将 id 视为主键 SQL 等效项。所以在持久化Java对象的时候不需要设置id; id会自动生成。 当您设置@OneToMany 注释时,SQL 中的等价是一对多关系。如果您不想设置付款,请不要这样做......

一些要持久化的代码:

1.必须注入EntityManager

@PersistenceContext(unitName = "myPU")
    private EntityManager entityManager;

2。持久化 POJObjcte(Java Transaction API (JTA) 会处理它)

  @Transactional(value = TxType.REQUIRED)
  public TransactionType create(@NotNull TransactionType item) 
        item.setPayment(payments); //it is not mandatory if you do not want to have payments
        item = entityManager.persist(item);
        return item;
     

持久化项目后,会自动设置id。

【讨论】:

以上是关于如何使用 @GeneratedValue(strategy = GenerationType.AUTO) 创建对象的主要内容,如果未能解决你的问题,请参考以下文章

hibernate 不会创建所有关联的表

由于语法错误表未在 DB 中创建

如何使用 @GeneratedValue(strategy = GenerationType.AUTO) 创建对象

如何使用 @ID 和 @GeneratedValue 从 Hibernate + JPA 中的序列中获取 Oracle 生成的值

如何在休眠中不继承 Id GeneratedValue(在子类中禁用 @GeneratedValue)

Java JPA(EclipseLink)如何在持久化实际实体之前接收下一个 GeneratedValue?