java 个对象的 ID 未与数据库同步
ID of java objects not synchronizing with database
我发现的唯一 link 接近于我正在经历的是这个:
How do you synchronize the id of a java object to its associated db row?
并没有太多的解决方案。
我的问题是我的 Java 对象在添加到我的数据库后没有更新,尽管 .commit()
em.getTransaction().begin();
System.out.println(eleve.getID());
em.persist(eleve);
em.getTransaction().commit();
System.out.println(eleve.getID());
指的是这个class
public class Eleve {
private String _nom;
private String _prenom;
private float _ptsMerite;
@Id
private int _IDEleve;
并产生以下输出:
0
0
我认为我在持久性方面做得很好,因为它确实在数据库 (mySQL) 中创建了具有正确 ID 的对象,我已将其设置为自动增量。
我对所有内容(注释等)都使用 javax.persistence。
您是否尝试在您的 ID 字段中添加 @GeneratedValue
注释?
您可以选择四种可能的策略:
GenerationType.AUTO
: JPA提供者将为底层数据库选择合适的策略。
GenerationType.IDENTITY
:依赖于数据库中的 auto-increment 列。
GenerationType.SEQUENCE
: 依赖数据库序列
GenerationType.TABLE
: 使用数据库中的生成器table。
更多信息:https://www.baeldung.com/jpa-strategies-when-set-primary-key
如果您曾经更改为功能更强大的框架,这很可能会管理您的事务 (CMT),因此您不能(或不想)每次想要访问新实体的 ID 时都提交。在这些情况下,您可以使用 EntityManager#flush
将 Entity Manager 与数据库同步。
我发现的唯一 link 接近于我正在经历的是这个: How do you synchronize the id of a java object to its associated db row? 并没有太多的解决方案。
我的问题是我的 Java 对象在添加到我的数据库后没有更新,尽管 .commit()
em.getTransaction().begin();
System.out.println(eleve.getID());
em.persist(eleve);
em.getTransaction().commit();
System.out.println(eleve.getID());
指的是这个class
public class Eleve {
private String _nom;
private String _prenom;
private float _ptsMerite;
@Id
private int _IDEleve;
并产生以下输出: 0 0
我认为我在持久性方面做得很好,因为它确实在数据库 (mySQL) 中创建了具有正确 ID 的对象,我已将其设置为自动增量。 我对所有内容(注释等)都使用 javax.persistence。
您是否尝试在您的 ID 字段中添加 @GeneratedValue
注释?
您可以选择四种可能的策略:
GenerationType.AUTO
: JPA提供者将为底层数据库选择合适的策略。GenerationType.IDENTITY
:依赖于数据库中的 auto-increment 列。GenerationType.SEQUENCE
: 依赖数据库序列GenerationType.TABLE
: 使用数据库中的生成器table。
更多信息:https://www.baeldung.com/jpa-strategies-when-set-primary-key
如果您曾经更改为功能更强大的框架,这很可能会管理您的事务 (CMT),因此您不能(或不想)每次想要访问新实体的 ID 时都提交。在这些情况下,您可以使用 EntityManager#flush
将 Entity Manager 与数据库同步。