【问题标题】:throws exception becuase of duplicate entity in hibernate由于休眠中的重复实体而引发异常
【发布时间】:2015-10-17 23:08:39
【问题描述】:

问题:每次我运行程序时它都会因为重复的实体而引发异常,这没问题。我必须抓住它还是有更好的方法来处理它?它与 hashcode- && 相等方法有关吗?

这是我的 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();
    }
}

【问题讨论】:

    标签: java hibernate jpa duplicates entity


    【解决方案1】:

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

    【讨论】:

    • 但是如果我在其中构建一个用户界面,例如有人想使用相同的电子邮件地址注册自己,该怎么办。它会抛出异常。我通常做什么?自己赶上还是有更好的方法来处理它?
    • 他为什么不能忽略它??
    • 您通常会捕获异常并向用户显示提供的电子邮件已在使用中的消息。
    猜你喜欢
    • 2012-03-11
    • 2012-09-19
    • 2016-10-18
    • 2014-06-20
    • 2017-01-22
    • 2013-11-05
    • 2018-04-01
    • 2012-12-27
    相关资源
    最近更新 更多