Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在hibernate中,虽然我将cascade type设置为ALL,但为什么在删除时仍然收到外键冲突异常?_Java_Spring_Hibernate - Fatal编程技术网

Java 在hibernate中,虽然我将cascade type设置为ALL,但为什么在删除时仍然收到外键冲突异常?

Java 在hibernate中,虽然我将cascade type设置为ALL,但为什么在删除时仍然收到外键冲突异常?,java,spring,hibernate,Java,Spring,Hibernate,我的数据库有两个表。一个是大学,另一个是教员。他们是一对多的关系 package server.hibernate.domain; import static javax.persistence.GenerationType.IDENTITY; import java.io.Serializable; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import ja

我的数据库有两个表。一个是大学,另一个是教员。他们是一对多的关系

package server.hibernate.domain;

import static javax.persistence.GenerationType.IDENTITY;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

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.OneToMany;
import javax.persistence.Table;
import javax.persistence.Version;





@Entity
@Table(name = "UNIVERSITY")
public class University implements Serializable{


    private Long _id;
    private int _version;
    private String _universityName;
    private String _countryLocated;
    private Set<Faculty> _faculties = new HashSet<Faculty>();

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "ID")
    public Long getId() {
        return _id;
    }
    public void setId(Long _id) {
        this._id = _id;
    }

    @Version
    @Column(name = "VERSION")
    public int getVersion() {
        return _version;
    }

    public void setVersion(int _version) {
        this._version = _version;
    }

    @Column(name = "UNIVERSITY_NAME", nullable=false)
    public String getUniversityName() {
        return _universityName;
    }
    public void setUniversityName(String _universityName) {
        this._universityName = _universityName;
    }

    @Column(name = "COUNTRY_LOCATED")
    public String getCountryLocated() {
        return _countryLocated;
    }
    public void setCountryLocated(String _countryLocated) {
        this._countryLocated = _countryLocated;
    }

    @OneToMany(mappedBy="university", targetEntity=Faculty.class, orphanRemoval=true, fetch=FetchType.EAGER, cascade=CascadeType.ALL)
    public Set<Faculty> getFaculties() {
        return _faculties;
    }
    public void setFaculties(Set<Faculty> faculties) {
        this._faculties = faculties;
    }

    public String toString(){

        return new String("UniversityID:"+_id
                + " UniversityName:"+_universityName
                +" CountryLocated:"+_countryLocated);
    }





}
有人能提出解决办法吗


谢谢

这是因为您正试图删除与其他学院关联的大学
因此,在删除大学之前,你必须先删除相关的学院。

我自己解决了我的问题

这是一个获取问题。
当我尝试使用sessionFactory.delete(University)删除大学时,此大学不获取任何学院。因此,删除将不会被级联启用。

能否显示整个实体类和整个stacktrace以及删除实体的代码?检查是否尝试将教员的“大学id”设置为可空?孤立删除是否自动执行此操作?请在此添加表结构,并将hibernate日志级别设置为调试,以便获得有关它的更多信息。。还添加了教员实体类的代码。。。
package server.hibernate.domain;

import static javax.persistence.GenerationType.IDENTITY;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

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.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Version;

@Entity
@Table(name="FACULTY")
public class Faculty implements Serializable{

    private Long _id;
    private int _version;
    private String _facultyName;
    private String _deanName;
    private University _university;
    private Set<Student> _students = new HashSet<Student>();

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "ID")
    public Long getId() {
        return _id;
    }
    public void setId(Long id) {
        this._id = id;
    }

    @Version
    @Column(name = "VERSION")
    public int getVersion() {
        return _version;
    }
    public void setVersion(int version) {
        this._version = version;
    }

    @Column(name="FACULTY_NAME", nullable=false)
    public String getFacultyName() {
        return _facultyName;
    }
    public void setFacultyName(String facultyName) {
        this._facultyName = facultyName;
    }

    @Column(name="DEAN_NAME")
    public String getDeanName() {
        return _deanName;
    }
    public void setDeanName(String dean_name) {
        this._deanName = dean_name;
    }

    @ManyToOne
    @JoinColumn(name = "UNIVERSITY_ID", nullable=false)
    public University getUniversity() {
        return _university;
    }
    public void setUniversity(University university) {
        this._university = university;
    }

    @OneToMany(mappedBy="faculty", targetEntity=Student.class, orphanRemoval=true, cascade=CascadeType.ALL, fetch=FetchType.EAGER)
    public Set<Student> getStudents() {
        return _students;
    }
    public void setStudents(Set<Student> students) {
        this._students = students;
    }

    public String toString(){

        return new String("FacultyID:"+_id
                +" FacultyName:"+_facultyName
                +" DeanName:"+_deanName);
    }


}
Exception in thread "main" org.springframework.dao.DataIntegrityViolationException: could not delete: [server.hibernate.domain.University#1]; SQL [delete from UNIVERSITY where ID=? and VERSION=?]; constraint ["FKE9B72644368E5BBD: PUBLIC.FACULTY FOREIGN KEY(UNIVERSITY_ID) REFERENCES PUBLIC.UNIVERSITY(ID)"; SQL statement:
delete from UNIVERSITY where ID=? and VERSION=? [23503-160]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not delete: [server.hibernate.domain.University#1]
    at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:643)
    at org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:793)
    at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:664)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at com.sun.proxy.$Proxy19.removeUniversity(Unknown Source)
    at main.TestHibernateMain.test(TestHibernateMain.java:73)
    at main.TestHibernateMain.main(TestHibernateMain.java:22)
Caused by: org.hibernate.exception.ConstraintViolationException: could not delete: [server.hibernate.domain.University#1]
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2710)
    at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2893)
    at org.hibernate.action.EntityDeleteAction.execute(EntityDeleteAction.java:97)
    at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:189)
    at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
    at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
    at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
    at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:656)
    ... 9 more
Caused by: org.h2.jdbc.JdbcSQLException: Referential integrity constraint violation: "FKE9B72644368E5BBD: PUBLIC.FACULTY FOREIGN KEY(UNIVERSITY_ID) REFERENCES PUBLIC.UNIVERSITY(ID)"; SQL statement:
delete from UNIVERSITY where ID=? and VERSION=? [23503-160]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
    at org.h2.message.DbException.get(DbException.java:169)
    at org.h2.message.DbException.get(DbException.java:146)
    at org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:398)
    at org.h2.constraint.ConstraintReferential.checkRowRefTable(ConstraintReferential.java:415)
    at org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:291)
    at org.h2.table.Table.fireConstraints(Table.java:861)
    at org.h2.table.Table.fireAfterRow(Table.java:878)
    at org.h2.command.dml.Delete.update(Delete.java:98)
    at org.h2.command.CommandContainer.update(CommandContainer.java:73)
    at org.h2.command.Command.executeUpdate(Command.java:219)
    at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:143)
    at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:129)
    at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2692)
    ... 20 more