[jboss-user] [Persistence, JBoss/CMP, Hibernate, Database] - Problem with Session EJB - Hibernate

OnurAktas do-not-reply at jboss.com
Thu Mar 6 14:14:19 EST 2008


Hi, i am very new on Hibernate, and also EJB's. The problem is that i just want to save @ManyToOne related records based on different tables.

Please tell me if i am following a WRONG architecture? And also when i execute mainline, 
i get an error of 

java.lang.RuntimeException: javax.transaction.RollbackException: [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] Can't commit because the transaction is in aborted state
  | .
  | .
  | .
  | .
  | 	at com.las.client.MainLine.main(MainLine.java:52)
  | Caused by: java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.las.pojo.BookEntity.categoryEN -> com.las.pojo.CategoryEntity
  | 	at
  | 

I use MSSQL, PK Fields are identity.. Here are my codes..
CATEGORY has many BOOKs


Book Entity / Pojo 
@Entity
  | @Table(name="BOOK")
  | public class BookEntity implements Serializable {    
  |     @Id @GeneratedValue
  |     @Column(name="ID")
  |     private Long id;
  |     
  |     @Column(name="NAME")        
  |     private String name;
  |            
  |     @ManyToOne    
  |     @JoinColumn(name="CATEGORYID")
  |     private CategoryEntity categoryEN;
  |     
  |     public BookEntity() {
  |     }
  | 
  |     public void setId(Long id) {
  |         this.id = id;
  |     }
  | 
  |     public Long getId() {
  |         return id;
  |     }
  | 
  |     public void setName(String name) {
  |         this.name = name;
  |     }
  | 
  |     public String getName() {
  |         return name;
  |     }
  | 
  |     public void setCategoryEN(CategoryEntity categoryEN) {
  |         this.categoryEN = categoryEN;
  |     }
  | 
  |     public CategoryEntity getCategoryEN() {
  |         return categoryEN;
  |     }
  | }
  | 
Category Entity / Pojo 

  | @Entity
  | @Table(name="CATEGORY")
  | public class CategoryEntity implements Serializable {
  |     @Id @GeneratedValue
  |     @Column(name="ID")  
  |     private Long id;
  |     
  |     @Column(name="NAME")
  |     private String name;
  |     
  |     @OneToMany(mappedBy="categoryEN")
  |     private Set<BookEntity> bookList;
  |     
  |     public CategoryEntity() {
  |         
  |     }
  |     
  |     public CategoryEntity(String name) {
  |         this.name = name;
  |     }
  |     public void setId(Long id) {
  |         this.id = id;
  |     }
  | 
  |     public Long getId() {
  |         return id;
  |     }
  | 
  |     public void setName(String name) {
  |         this.name = name;
  |     }
  | 
  |     public String getName() {
  |         return name;
  |     }
  | 
  |     public void setBookList(Set<BookEntity> bookList) {
  |         this.bookList = bookList;
  |     }
  | 
  |     public Set<BookEntity> getBookList() {
  |         return bookList;
  |     }
  | }
BookEJB 
@Stateless(name="BookEJB")
  | public class BookEJBBean implements BookEJB, BookEJBLocal {
  | 
  |     @PersistenceContext(unitName="lasDatabase")
  |     private EntityManager em;
  |     
  |     public BookEJBBean() {
  |         
  |     }
  |     
  |     public void Save(BookEntity BookEN) {    
  |         em.persist(BookEN);
  |     }    
  |     public void Delete(BookEntity BookEN) {        
  |     }
  |     public List<BookEntity> getAll() {            
  |         return em.createQuery("from BOOK")
  |                  .getResultList();        
  |     }
  |     public BookEntity getSimple(Long id) {
  |        return em.find(BookEntity.class, id);        
  |     }       
  | }

CategoryEJB 
@Stateless(name="CategoryEJB")
  | public class CategoryEJBBean implements CategoryEJB, Serializable {
  |     
  |     @PersistenceContext(unitName="lasDatabase")
  |     private EntityManager em;
  |     
  |     public CategoryEJBBean() {
  |         
  |     }
  |     
  |     public void Save(CategoryEntity categoryEN) {        
  |         em.persist(categoryEN);        
  |     }    
  |     public void Delete(CategoryEntity categoryEN) {        
  |     }
  |     public List<CategoryEntity> getAll() {            
  |         return em.createQuery("from CATEGORY")
  |                  .getResultList();        
  |     }
  |     public CategoryEntity getSimple(Long id) {
  |        return em.find(CategoryEntity.class, id);        
  |     }       
  | }

CLIENT CODE

public class MainLine {
  |     public MainLine() {
  |     }
  | 
  |     public static void main(String[] args) {
  |         MainLine mainLine = new MainLine();
  |         
  |         try {
  |             Context context = new InitialContext();                    
  | 
  |             CategoryEJB categoryRemote = (CategoryEJB)context.lookup("lasejb/CategoryEJB/remote");                                        
  |             BookEJB bookRemote = (BookEJB)context.lookup("lasejb/BookEJB/remote");
  |                    
  |             CategoryEntity categoryEN = new CategoryEntity("Horror");                                                                      
  |             categoryRemote.Save(categoryEN);   
  | 
  |             BookEntity bookEN = new BookEntity();                         
  |                 bookEN.setIsbn("123-321-333");
  |                 bookEN.setName("ABC");
  |                 bookEN.setCategoryEN(categoryEN);                
  | 
  |             categoryRemote.Save(categoryEN);
  |             bookRemote.Save(bookEN);        
  |         }  
  |         catch(Exception ex) {
  |             ex.printStackTrace();
  |         }
  |     }
  | }

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4134661#4134661

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4134661



More information about the jboss-user mailing list