删除查询无法使用hibernate 5.2.1,并且在调试模式下也会出现异常

时间:2017-03-03 18:48:34

标签: hibernate jpa hibernate-mapping hibernate-entitymanager

我有两个持久性类Person和Account如下:

人类

package org.proggence.persistence;

import static javax.persistence.GenerationType.IDENTITY;

import java.sql.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name = "person")
public class Person {

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "person_id", unique = true, nullable = false)
    private Long person_id;

    @Column(name = "first_name", unique = false, nullable = true)
    private String  first_name = "";

    @Column(name = "middle_name", unique = false, nullable = true)
    private String middle_name = "";

    @Column(name = "last_name", unique = false, nullable = true)
    private String last_name = "";

    @Column(name = "cnic", unique = false, nullable = true)
    private String cnic;

    @Column(name = "dob", unique = false, nullable = true)
    private Date dob;

    @Column(name = "gender", unique = false, nullable = true)
    private String gender;

    @Column(name = "zipcode", unique = false, nullable = true)
    private String zipcode;

    @Column(name = "address1", unique = false, nullable = true)
    private String address1;

    @Column(name = "address2", unique = false, nullable = true)
    private String address2;

    @Column(name = "phone_no", unique = false, nullable = true)
    private String phone_no;

    @Column(name = "image", unique = false, nullable = true)
    private String image;

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "person", cascade = CascadeType.ALL)
    private Account account;

    public Person(){}

    public Long getPerson_id() {
        return person_id;
    }

    public void setPerson_id(Long person_id) {
        this.person_id = person_id;
    }

    public String getFirst_name() {
        return first_name;
    }

    public void setFirst_name(String first_name) {
        this.first_name = first_name;
    }

    public String getMiddle_name() {
        return middle_name;
    }

    public void setMiddle_name(String middle_name) {
        this.middle_name = middle_name;
    }

    public String getLast_name() {
        return last_name;
    }

    public void setLast_name(String last_name) {
        this.last_name = last_name;
    }

    public String getCnic() {
        return cnic;
    }

    public void setCnic(String cnic) {
        this.cnic = cnic;
    }

    public Date getDob() {
        return dob;
    }

    public void setDob(Date dob) {
        this.dob = dob;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getZipcode() {
        return zipcode;
    }

    public void setZipcode(String zipcode) {
        this.zipcode = zipcode;
    }

    public String getAddress1() {
        return address1;
    }

    public void setAddress1(String address1) {
        this.address1 = address1;
    }

    public String getAddress2() {
        return address2;
    }

    public void setAddress2(String address2) {
        this.address2 = address2;
    }

    public String getPhone_no() {
        return phone_no;
    }

    public void setPhone_no(String phone_no) {
        this.phone_no = phone_no;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public Account getAccount() {
        return account;
    }

    public void setAccount(Account account) {
        this.account = account;
    }
}

和帐户类

package org.proggence.persistence;

import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

@Entity(name = "Account")
@Table(name="ACCOUNT")
public class Account {

    @Id
    @Column(name = "PERSON_ID", unique = true, nullable = false)
    private Long person_id;

    @Column( name = "USERNAME" )
    private String username;    

    @Column( name = "PASSWORD" )
    private String password;

    @Column( name = "EMAIL" )
    private String email;

    @Column( name = "STATUS" )
    private String status;

    @Column( name = "WORK_MODE" )
    private String work_mode;

    @Column( name = "LOGIN_TIME" )
    private Timestamp login_time;

    @Column( name = "PASS_RESET_CODE" )
    private String pass_reset_code;

    @OneToOne(fetch = FetchType.LAZY)
    @PrimaryKeyJoinColumn
    private Person person;

    public Account(){}

    public Long getPerson_id() {
        return person_id;
    }

    public void setPerson_id(Long person_id) {
        this.person_id = person_id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

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

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getWork_mode() {
        return work_mode;
    }

    public void setWork_mode(String work_mode) {
        this.work_mode = work_mode;
    }

    public Timestamp getLogin_time() {
        return login_time;
    }

    public void setLogin_time(Timestamp login_time) {
        this.login_time = login_time;
    }

    public String getPass_reset_code() {
        return pass_reset_code;
    }

    public void setPass_reset_code(String pass_reset_code) {
        this.pass_reset_code = pass_reset_code;
    }

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }
}

为什么我的删除查询没有删除记录?

public static void main(String[] arguments){
    try{


        EntityManager em = HibernateUtil.getEntityManager();

        new PersonDao().getAll();

        em.getTransaction().begin();
        Account account = em.find(Account.class, Long.valueOf("2"));

        em.remove(account);
        em.getTransaction().commit();


    }catch(Exception e){
        System.out.println(e.getMessage());
        e.printStackTrace();
    }
}

Add,Update和Read等其他查询工作正常。

每当我尝试调试代码时,在每个查询中都会导致以下异常。 enter image description here

我的persistence.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

<persistence-unit name="jpaHospice" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <class>org.proggence.persistence.Person</class>
    <class>org.proggence.persistence.Account</class>
    <properties>

        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
        <!-- <property name="hibernate.hbm2ddl.auto" value="create-drop"/> -->

        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hospice"/>
        <property name="javax.persistence.jdbc.user" value="root"/>
        <property name="javax.persistence.jdbc.password" value="admin"/>
    </properties>
</persistence-unit>

</persistence>

0 个答案:

没有答案