【发布时间】:2023-04-01 20:45:01
【问题描述】:
在我持久化一个对象并像这样提交之后:
Version version = new Version();
version.setVersion(getNext(this.version));
version.setProjectID(projectID);
em.persist(version);
em.getTransaction().commit();
我想通过这个代码行获取 ID(Primary Key):
Object id = factory.getPersistenceUnitUtil().getIdentifier(version);
我可以得到Version 和ProjectID,但ID 是null。 ID 是自动生成的,但仍返回 null。我试图在我的实体类中实现@GeneratedValue(strategy=GenerationType.IDENTITY),但没有任何改变。有什么解决办法吗?
编辑更多代码
版本实体:这是使用 EmbededId
@Entity
@NamedQuery(name="Version.findAll", query="SELECT v FROM Version v")
@Table(name="Version")
public class Version implements Serializable {
@EmbeddedId
@GeneratedValue(strategy=GenerationType.SEQUENCE)
private VersionPK id;
@Column(name="Version")
private String version;
@Column(name="ProjectID")
private int projectID;
可嵌入类:
@Embeddable
public class VersionPK implements Serializable {
//default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;
@Column(name="ID")
private int id;
public VersionPK() {
}
【问题讨论】:
-
我不太确定我是否理解正确,但您可以看看 JPA2 中的
@id注释。也许这可以解决您的问题。 -
也许向人们展示你的实际课程可能会有所帮助?
-
我认为问题在于该实体对象无法从数据库中获取自动生成的 ID。方法
version.getId()总是返回 null 但version.getVersion和version.getProjectID运行良好。
标签: java jpa eclipselink jpa-2.0