2017-02-18 21 views
2
сообщения

Ошибки:Hibernate вставить ошибку

javax.persistence.RollbackException: Ошибка во время совершения сделки

У меня возникли проблемы сохранения данных пользователя. появилась эта ошибка, то вид, что проект находится в:

метод для сохранения:

public void save(User u) 
    { 
     EntityManager em = JPAUtil.getEntityManager(); 
     EntityTransaction tx = em.getTransaction();   

     try 
     { 
     tx.begin(); 
     if (u.getId_User()== null) { 

      em.persist(u); 
     } else { 
      em.merge(u); 
     } 
     tx.commit(); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
     if (tx != null && tx.isActive()) { 
      tx.rollback(); 
     } 
    } finally { 
     em.close(); 
    } 
} 

метод, который принимает данные формы:

public String addUser(Address a, User u) 
{ 
    u.setAddress(a); 
    userDAO.save(u); 
    return "User saved successfully!"; 
} 

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence  http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
<persistence-unit name="consultoriowebPU"> 
    <!-- Hibernate --> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <properties> 
     <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/bd_consultorioweb?useUnicode=true&amp;characterEncoding=UTF-8&amp;characterSetResults=UTF-8"/> 
     <property name="javax.persistence.jdbc.user" value="root"/> 
     <property name="javax.persistence.jdbc.password" value=""/> 
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> 
     <property name="hibernate.hbm2ddl.auto" value="update"/> 
     <property name="hibernate.show_sql" value="true" /> 
     <property name="hibernate.format_sql" value="true" />    
    </properties> 
</persistence-unit> 

User.class [модель]:

@Entity 
public class User implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 

    @Id @GeneratedValue 
    private Long Id_User; 
    private String email_User; 
    private String name_User; 
    private String password_User; 
    private int status_User; 
    @ManyToOne 
    private Address address; 
    //Get and set.. 
    } 

Address.class [модель]:

@Entity 
public class Address implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 

    @Id @GeneratedValue 
    private Long Id_Address; 
    private String Country; 
    private String State; 
    private String City; 
    private String Neighborhood; 
    private String Street; 
    private Long Number; 
    private String Complement; 
    private String Zipcode; 

    //Get and set..  
} 

Вот список библиотек/баночку используется: http://imgur.com/a/NDmmQ В консоли, только вставка SQL появляется, а затем сообщение об ошибке и данные не записываются в базу данных.

ответ

1

Я предполагаю, что объект адреса, который вы заполняете пользователем, является отдельным объектом.

Я хотел бы добавить следующие параметры каскадных к объекту пользователя:

@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) 
@JoinColumn(name = "address_id") 
private Address address; 

Теперь, когда объект Пользователя сохранялся/сливался, а затем также адрес объект будет сохраняться/слит.

+0

Это действительно сработало! Но мне пришлось переключиться на: @JoinColumn (name = "address_id") Большое спасибо! –

+1

Отлично. Рад, что я мог бы помочь .. и да, это должно быть, конечно, joincolumn .., должно быть, поспешили с ответом –