如何使用 @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) 创建对象的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 @GeneratedValue(strategy = GenerationType.AUTO) 创建对象
如何使用 @ID 和 @GeneratedValue 从 Hibernate + JPA 中的序列中获取 Oracle 生成的值