2011-09-23 6 views
0

데이터베이스에 지속되고 플러시 된 후 ID 필드를 채우지 않는 내장 된 PK 객체가 있습니다. ID는 데이터베이스의 자동 증가 필드입니다. 이제 일반적으로임베디드 PK 객체가 지속 및 플러시 후에 채워지지 않음

, 난 그냥 새로 고침을 시도 할 것이다, 그러나 그것은 다음과 같은 오류가 발생합니다 :

"엔티티가 더 이상 데이터베이스에 존재 : entity.Customers를 [customersPK = entity.CustomersPK [ID = 0, classesId =을 36]]. " 여기

public class Customers implements Serializable { 

    @EmbeddedId 
    protected CustomersPK customersPK; 
    ... 
} 

@Embeddable 
public class CustomersPK implements Serializable { 
    @Basic(optional = false) 
    @Column(name = "id") 
    private int id; 

    @Basic(optional = false) 
    @NotNull 
    @Column(name = "classes_id") 
    private int classesId; 
    ..... 
} 

그리고

통화에게 도움을

Classes cl = em.find(Classes.class, classId); 

CustomersPK custPK = new CustomersPK(); 
custPK.setClassesId(cl.getId()); 
Customers cust = new Customers(custPK); 

em.persist(cust); 
em.flush(); 


// The problem is right here where id always equals 0 
int id = cust.getCustomerspk().getId(); 

감사를 만드는 코드입니다.

답변

2

왜 ID가 0이 아니며 설정하지 않았습니까?

생성 된 ID 인 경우 @GeneratedValue를 사용하여 주석을 달아야합니다. 그렇지 않으면 값을 설정해야합니다.

+0

감사합니다. 여전히 JPA를 배우십시오. PK 객체가없고 flush()가 ID를 포착 했으므로 다른 표 안에 @GeneratedValue 표기법을 사용할 필요가 없습니다. 그래서, 이것은 나에게 완전히 명백하지 않았습니다. 다시 한번 감사드립니다. – JCab

관련 문제