java - 由于 hibernate 中的重复实体而引发异常

标签 java hibernate jpa duplicates entity

问题:每次我运行程序时,它都会抛出异常,因为重复的实体是正常的。我必须捕获它还是有更好的方法来处理它?这与 hashcode- && equal-method 有关吗?

这是我的 persistence.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">

<persistence-unit name="PersistenceUnit">
    <!--<provider>org.hibernate.ejb.HibernatePersistence</provider>-->

<class>entities.Benutzer</class>

    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>

        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/dbwebanw_sose15_03"/>
        <property name="hibernate.connection.username" value="root"/>
        <property name="hibernate.connection.password" value="admin"/>

        <property name="hibernate.hbm2ddl.auto" value="update"/>


    </properties>

</persistence-unit>

这是我的实体类:

import javax.persistence.*;
import java.io.Serializable;

@Entity
@Table(name ="benutzer", catalog = "dbwebanw_sose15_03")
@SecondaryTable(name="benutzerdaten",
    pkJoinColumns = @PrimaryKeyJoinColumn(name = "benutzer_id"))
public class Benutzer implements Serializable {

    private static final long serialVersionUID = 986052564986612458L;
    private int id;
    private String name;
    private String email;
    private String passwort;
    private byte istAdministrator;

    public Benutzer() {
    }

    public Benutzer(String name, String email, String passwort, byte istAdministrator) {
        this.name = name;
        this.email = email;
        this.passwort = passwort;
        this.istAdministrator = istAdministrator;
    }

    @Id
    @GeneratedValue
    @Column(name = "benutzer_id")
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Basic
    @Column(table="benutzerdaten",name = "name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Basic
    @Column(name="email", unique = true)
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Basic
    @Column(table="benutzerdaten",name = "passwort")
    public String getPasswort() {
        return passwort;
    }

    public void setPasswort(String passwort) {
        this.passwort = passwort;
    }

    @Basic
    @Column(table="benutzerdaten")
    public byte getIstAdministrator() {
        return istAdministrator;
    }

    public void setIstAdministrator(byte istAdministator) {
        this.istAdministrator = istAdministator;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Benutzer that = (Benutzer) o;

        if (id != that.id) return false;
        if (istAdministrator != that.istAdministrator) return false;
        if (name != null ? !name.equals(that.name) : that.name != null) return false;
        if (email != null ? !email.equals(that.email) : that.email != null) return false;
        if (passwort != null ? !passwort.equals(that.passwort) : that.passwort != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = id;
        result = 31 * result + (name != null ? name.hashCode() : 0);
        result = 31 * result + (email != null ? email.hashCode() : 0);
        result = 31 * result + (passwort != null ? passwort.hashCode() : 0);
        result = 31 * result + (int) istAdministrator;
        return result;
    }
}

这是我的主类:

import javax.persistence.*;
import entities.Benutzer;

public class Main {

    public static void main( String[ ] args ) {

        EntityManagerFactory emfactory =     Persistence.createEntityManagerFactory("PersistenceUnit");

        EntityManager entitymanager = emfactory.createEntityManager();
        entitymanager.getTransaction( ).begin( );

        Benutzer benutzer = new Benutzer("Mahmut Demir", "be_mahmut@web.de", "meric",(byte)1);

        entitymanager.persist(benutzer);

        entitymanager.getTransaction( ).commit( );

        entitymanager.close( );
        emfactory.close();
    }
}

最佳答案

email 是映射中的唯一列,但您始终插入相同的电子邮件。

关于java - 由于 hibernate 中的重复实体而引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31658610/

相关文章:

java - 如何正确检测 servlet 规范 3 中的客户端断开连接?

java - GWT RPC 调用在运行时异常后不会回滚事务

hibernate - Autowiring 依赖项注入(inject)失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException :

java - 嵌套异常是 org.hibernate.exception.JDBCConnectionException : Unable to acquire JDBC Connection

java - Intellij 检查 switch case fall-through

java - 搜索 int 的问题

java - JPA 和业务逻辑 - 在两个地方重用相同的条件

javax.persistence.RollbackException : Error while committing the transaction (JPA without Spring)

java - 理解 `Pro JPA 2 Mastering the java Persistence API` 中的一段话吗?

java - GenericDAO + Spring + JPA2 没有独特的 bean