JPA2: я сохраняю сущность, исключений нет, но данные не сохраняются в базе данных - PullRequest
2 голосов
/ 05 ноября 2011

Я использую EJB для написания демонстрационного кода CRUD на NetBeans .. Когда я пишу код, который может сохранять данные в базе данных, нет ошибок и исключений, но данные не сохраняются в базе код:

EntityBean:

 @Entity
    @Table(name = "book_book")
    @XmlRootElement
    @NamedQueries({
        @NamedQuery(name = "BookBook.findAll", query = "SELECT b FROM BookBook b"),
        @NamedQuery(name = "BookBook.findByIsbn", query = "SELECT b FROM BookBook b WHERE b.isbn = :isbn"),
        @NamedQuery(name = "BookBook.findByDealTotal", query = "SELECT b FROM BookBook b WHERE b.dealTotal = :dealTotal"),
        @NamedQuery(name = "BookBook.findBySaleTotal", query = "SELECT b FROM BookBook b WHERE b.saleTotal = :saleTotal"),
        @NamedQuery(name = "BookBook.findBySalePrice", query = "SELECT b FROM BookBook b WHERE b.salePrice = :salePrice"),
        @NamedQuery(name = "BookBook.findByDealPrice", query = "SELECT b FROM BookBook b WHERE b.dealPrice = :dealPrice")})
    public class BookBook implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @Basic(optional = false)
    //    @NotNull
        @Column(name = "isbn")
        private Long isbn;
        @Column(name = "deal_total")
        private Integer dealTotal;
        @Column(name = "sale_total")
        private Integer saleTotal;
        @Column(name = "sale_price")
        private Integer salePrice;
        @Column(name = "deal_price")
        private Integer dealPrice;
        @OneToMany(mappedBy = "isbn")
        private List<BookBookdetail> bookBookdetailList;

DAClass (не сессия):

 EntityManagerFactory factory=Persistence.createEntityManagerFactory("BookXPU");
    EntityManager em=factory.createEntityManager();

      public long  createBook(Long isbn, Integer dealTotal, Integer saleTotal, Integer salePrice, Integer dealPrice){
       BookBook book=new BookBook();
       book.setDealTotal(dealTotal);
       book.setSalePrice(salePrice);
       book.setDealTotal(dealTotal);
       book.setDealPrice(dealPrice);
       book.setIsbn(isbn);
       List<BookBookdetail> list=new ArrayList<BookBookdetail>();
       book.setBookBookdetailList(null);
       em.persist(book);


       Query query =em.createQuery("SELECT b FROM BookBook b WHERE b.isbn = :isbn");
       query.setParameter("isbn",book);
       List list1=query.getResultList();
           for (Iterator it = list1.iterator(); it.hasNext();) {
               BookBookDetail book1 = (BookBookDetail)it.next();
               list.add(book1);
           }
           book.setBookBookdetailList(list);
       em.merge(book);
       return  book.getIsbn();


       }

Спасибо ...

1 Ответ

1 голос
/ 05 ноября 2011

Ваши сущности не сохраняются, потому что вы не сбрасываете сущности в свою базу данных .

Если вы используете свой код в Java SE, чем вы должны:

EntityTransaction tx = em.getTransaction();
tx.begin();
// persist, merge, etc. - operations which needs to be in the Tx...
tx.close();

Без этого вы не дадите признака того, что измененные вами данные должны быть сброшены в базовую базу данных.

Когда вы переместили свой код в EJB, вы использовали транзакции JTA (неявно). Поэтому транзакция EntityManager была частью транзакции JTA. По умолчанию каждый метод EJB представляет собой одну транзакцию JTA.

Теперь, комбинируя эти фрагменты информации, , помечая свой класс как EJB, вы сбросили данные в базовую базу данных .

НТН.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...