최대 절전 모드로 새로 변경되어 최대 절전 모드 4 버전을 사용하고 있기 때문에 삭제하십시오. 다음 코드에는 주석을 사용하는 일대일 관계의 간단한 예가 포함되어 있습니다. 부모 개체를 삭제하려고하면 외래 키 제약 조건 예외가 throw됩니다. 나는 이것을 달성하는 방법에 붙어 있고 혼란 스럽다. 이벤트 캐스케이드 타입을 모두 사용했습니다. 실수를 바로 잡으십시오.최대 절전 모드에서 1 대 1 관계를 사용하여 삭제
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="students")
public class Student {
@Id
@Column(name="student_id")
private long studentId=0;
@Column(name="sname",length=15)
private String studentName=null;
@Column(name="grp",length=15)
private String grp=null;
public long getStudentId() {
return studentId;
}
public void setStudentId(long studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public String getGrp() {
return grp;
}
public void setGrp(String grp) {
this.grp = grp;
}
}
이것은 데이터베이스에 삽입하고 업데이트하는 데 사용되는 상위 클래스입니다.
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Column;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="address")
public class Address {
@Id
@Column(name="address_id")
private long addressId=0;
@Column(name="place",length=30)
private String place=null;
@OneToOne(targetEntity=Student.class,fetch=FetchType.EAGER , cascade=CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="stud_id",referencedColumnName="student_id")
private Student parent;
public long getAddressId() {
return addressId;
}
public void setAddressId(long addressId) {
this.addressId = addressId;
}
public String getPlace() {
return place;
}
public void setPlace(String place) {
this.place = place;
}
public Student getParent() {
return parent;
}
public void setParent(Student parent) {
this.parent = parent;
}
}
다음과 같은 방법으로 개체를 삭제할 수 있습니다. 그러나 나는 예외를 얻고있다. 부모 개체와 관련된 자식 레코드를 삭제하는 방법?
public void deleteStudentDao(long studentId) throws Exception{
Session session=null;
try{
if(studentId >0 && factory!=null
&& !factory.isClosed()){
session=factory.openSession();
session.beginTransaction();
Student student=new Student();
student.setStudentId(studentId);
Address address=new Address();
address.setParent(student);
session.delete(address);
session.getTransaction().commit();
System.out.println("The Student "+studentId+" detail deleted");
}
}catch(HibernateException e){
session.getTransaction().rollback();
throw e;
}finally{
if(session!=null){
session.close();
}
}
}
예외 그런
ERROR: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`address`, CONSTRAINT `FK_4ok3rcn3mnfl5ma2wuwvkluuo` FOREIGN KEY (`stud_id`) REFERENCES `students` (`student_id`))
Mar 10, 2017 10:50:34 AM org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
org.hibernate.exception.ConstraintViolationException: could not execute statement
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:72)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:211)
at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:62)
at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3400)
at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3630)
at org.hibernate.action.internal.EntityDeleteAction.execute(EntityDeleteAction.java:114)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:463)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:349)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
at com.mv.dao.StudentDetailDAO.deleteStudentDao(StudentDetailDAO.java:98)
at com.mv.studentutil.StudentRelationalUtil.deleteStudentUtil(StudentRelationalUtil.java:56)
at com.mv.studentmodifier.StudentModifier.main(StudentModifier.java:54)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`address`, CONSTRAINT `FK_4ok3rcn3mnfl5ma2wuwvkluuo` FOREIGN KEY (`stud_id`) REFERENCES `students` (`student_id`))
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
at com.mysql.jdbc.Util.getInstance(Util.java:383)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1049)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4226)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4158)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2840)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2082)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2334)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2262)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2246)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208)
... 15 more
http://stackoverflow.com/questions/19678797/how-to-update-and-delete-a-record-in-hibernate-one : 여기
는 당신이 시도 할 수있는 코드 이 대답을 통해 1 대 1 매핑을 살펴보십시오 – Murad예외 스택 추적을 게시하십시오 – Chaitanya
감사 chiatanya. 그것은 작동하고 당신은 내 하루를 저장했습니다 –