나는이 같은 객체를 유지하고 커밋 후 :트랜잭션을 커밋 한 후 엔터티 개체에서 ID (PRIMARY KEY)를 가져 오는 방법은 무엇입니까?
Version version = new Version();
version.setVersion(getNext(this.version));
version.setProjectID(projectID);
em.persist(version);
em.getTransaction().commit();
가이 코드 라인에 의해 ID (기본 키)를 얻으려면 :
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;
포함 가능한 클래스 : 당신은 할 수 커밋 후 flush()
를 사용할 필요가
@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'는 잘 동작합니다. – gamo