3

我真的不明白。

如果我坚持一个新项目然后用它来获取自动生成的 key,它会失败:

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!

这怎么可能?

4

1 回答 1

2

我假设您正在远程访问 BookManagerBean,或者作为远程访问,因此 Book 被序列化,因此 id 被分配给不同的副本,并且只有在您返回它时才能从客户端访问。

要么返回它,要么将你的 bean 更改为本地的,而不是远程的。

于 2013-05-27T12:55:56.957 回答