2013-05-25 6 views
3

나는 정말로 그것을 얻지 못한다.JPA의 내부 동작

class BookManagerBean { 
    @PersistentContext 
    EntityManager em; 

    @Override 
    public void addBook(Book book) {   
      em.persist(book);     
    } 
} 
//...somewhere else 
@GetThisObjectByJNDI-OrInject 
BookManagerRemote bookManager;  

Book book = new Book("Writer","Title"); 
bookManager.addBook(book); 
book.getBookid() //<--NULL, didn't get synched, but new data with id in DB is fine 

을하지만 지속 된 항목을 반환하는 경우, 그것은 작동 :

나는 새로운 항목을 지속되면 다음 얻기 위해 그것을 사용하는 , 그것은 키 실패 자동 생성

class BookManagerBean { 
    @PersistentContext 
    EntityManager em; 

    @Override 
    public Book addBook(Book book) {   
      em.persist(book); 
      return book;      
    } 
} 

//...somewhere else 
@GetThisObjectByJNDI-OrInject 
BookManagerRemote bookManager;  

Book book = new Book("Writer","Title"); 
bookManager.book = addBook(book); 
book.getBookid() // <--- Auto-generated id is right here! It's synched! 

어떻게 이것이 가능한가?

+0

어떤 영속 공급자를 사용하고 있습니까? 최대 절전 모드? EclipseLink? –

+0

리턴 된 책이 addBook에 전달 된 동일한 인스턴스인지 점검하십시오. 원격으로 전달할 때 직렬화가 발생했을 수 있습니다. – Chris

+0

@Kevin EclipseLink – Croo

답변

2

BookManagerBean을 원격으로 또는 원격으로 액세스한다고 가정하고, 책을 직렬화하므로 ID가 다른 사본에 지정되고 반환하면 클라이언트에서만 액세스 할 수 있습니다.

반환하거나 콩을 로컬이 아닌 원격으로 변경하십시오.

+0

네가 맞아! BookManagerRemote 인터페이스를 통해 bookManager에 액세스했습니다. – Croo