Java 休眠插入错误
错误消息: javax.persistence.RollbackException:提交 交易 我在保存用户数据时遇到问题。出现此错误后,项目的形式如下: 要保存的方法:Java 休眠插入错误,java,hibernate,rest,jpa,Java,Hibernate,Rest,Jpa,错误消息: javax.persistence.RollbackException:提交 交易 我在保存用户数据时遇到问题。出现此错误后,项目的形式如下: 要保存的方法: public void save(User u) { EntityManager em = JPAUtil.getEntityManager(); EntityTransaction tx = em.getTransaction(); try
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&characterEncoding=UTF-8&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>
Address.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..
}
@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..
}
以下是所使用的库/jar的列表:
在控制台中,只显示insert sql,然后错误消息和数据库中没有记录任何数据。我假设您向用户填充的地址实体是分离的实体 我将向用户实体添加以下级联选项:
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "address_id")
private Address address;
现在,当用户实体被持久化/合并时,地址实体也将被持久化/合并。这真的很有效!但我不得不切换到:@JoinColumn(name=“address\u id”)非常感谢!伟大的很高兴我能帮上忙。。是的,它当然应该是。。一定是匆匆忙忙地给出了答案