Я прочитал много документов о своей проблеме, но предложения не смогли решить мою проблему, поэтому я вынужден был открыть эту тему.
Моя проблема в том, что когда я пытаюсь сохранить свою сущность, я получаю следующую ошибку.
Я добавил свои классы сущностей. Спасибо.
Сохранить код
@Transactional
@Override
public void saveEmployee(EmployeeTable employeeToSave)
{
employeeDao.saveOrUpdate(employeeToSave);
}
EmployeeTable
package de.adesso.kkBonus.model;
import com.google.common.collect.Lists;
import de.adesso.kkBonus.enums.*;
import de.adesso.kkBonus.util.BillConstants;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.hibernate.annotations.Cascade;
import org.springframework.beans.BeanUtils;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "employee_table")
@EqualsAndHashCode(of = {"id"})
@ToString(of = "id")
public class EmployeeTable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "deleted")
private boolean deleted;
@Column(name = "name", length = 200, nullable = false)
private String name;
@Column(name = "tckn", length = 11)
private String tckn;
@Column(name = "social_security_number")
private String socialSecurityNumber;
@Column(name = "address", length = 1000)
private String address;
@Column(name = "birthday")
private Date birthday;
@Column(name = "lob")
@Enumerated(EnumType.STRING)
private LobEnum lob;
@Column(name = "on_boarding_date", nullable = false)
private Date onBoardingDate;
@Column(name = "off_boarding_date")
private Date offBoardingDate;
@Column(name = "off_boarding_reason")
private String offBoardingReason;
@Column(name = "manager")
private boolean manager;
@Column(name = "created_by", length = 200, nullable = false)
private String createdBy;
@Column(name = "creation_date")
private Date creationDate;
@Column(name = "modified_by", length = 200, nullable = false)
private String modifiedBy;
@Column(name = "modified_date", updatable = false)
private Date modifiedDate;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "manager_fk", referencedColumnName = "id")
private EmployeeTable director;
@Column(name = "mail", length = 50, nullable = false)
private String mail;
@Column(name = "certificate", length = 1000)
private String certificate;
@Column(name = "billable")
private Boolean billable;
@Column(name = "outsource")
private Boolean outsource;
@Column(name = "location", length = 255)
private String location;
@Column(name = "gender")
@Enumerated(EnumType.STRING)
private GenderEnum gender;
@Column(name = "blood_type")
@Enumerated(EnumType.STRING)
private BloodTypeEnum bloodType;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "buddy", nullable = true)
private EmployeeTable buddy;
@Column(name = "contract_type")
@Enumerated(EnumType.STRING)
private ContractTypeEnum contractType;
@Column(name = "competence_center")
@Enumerated(EnumType.STRING)
private CompetenceCenterEnum competenceCenter;
@Column(name = "position")
@Enumerated(EnumType.STRING)
private PositionEnum position;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "hrbp", referencedColumnName = "id")
private EmployeeTable hrbp;
@Column(name = "education_status")
@Enumerated(EnumType.STRING)
private EducationStatusEnum educationStatus;
@Column(name = "military_status")
@Enumerated(EnumType.STRING)
private MilitaryStatusEnum militaryStatus;
@Column(name = "military_exempt_reason", length = 500)
private String militaryExemptReason;
@Column(name = "military_postponement_date")
private Date militaryPostponementDate;
@Column(name = "personal_phone_number", length = 20)
private String personalPhoneNumber;
@Column(name = "work_phone_number", length = 20)
private String workPhoneNumber;
@Column(name = "private_email", length = 50)
private String privateEmail;
@Column(name = "emergency_person_name", length = 120)
private String emergencyPersonName;
@Column(name = "emergency_person_phone_number", length = 11)
private String emergencyPersonPhoneNumber;
//Sicil No
@Column(name = "registry_number", length = 50)
private String registryNumber;
@Column(name = "continuity", length = 3)
private Integer continuity;
@Column(name = "iban", length = 50)
private String iban;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "graduation_id")
private GraduationTable graduation;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "employeeTable", orphanRemoval = true, fetch = FetchType.LAZY)
private UserTable userTable;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "employee", orphanRemoval = false, fetch = FetchType.LAZY)
private List<InventoryTable> inventoryTables;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "employee", orphanRemoval = true, fetch = FetchType.LAZY)
private List<ResearchAndDevelopmentDetailsTable> researchAndDevelopmentDetailsTables;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "employeeTable", orphanRemoval = true, fetch = FetchType.LAZY)
private List<EmployeeUploadTable> employeeUploadTables = Lists.newArrayList();
@Lob
@Column(name = "image", columnDefinition = "MEDIUMBLOB")
private String image;
@Transient
public boolean isMale() {
return gender.equals(GenderEnum.MALE);
}
public EmployeeTable createCopy() {
EmployeeTable target = new EmployeeTable();
BeanUtils.copyProperties(this, target);
if (this.getGraduation() != null) {
target.setGraduation(this.getGraduation().createCopy());
}
List listDocuments = new LinkedList();
if (employeeUploadTables != null) {
for (EmployeeUploadTable employeeUploadTable : employeeUploadTables) {
listDocuments.add(employeeUploadTable.createCopy());
}
target.getEmployeeUploadTables().clear();
target.getEmployeeUploadTables().addAll(listDocuments);
}
return target;
}
public boolean isOffBoarded() {
return offBoardingDate != null;
}
public EmployeeUploadTable getResidenceCertificate() {
if (employeeUploadTables != null) {
for (EmployeeUploadTable employeeUploadTable : employeeUploadTables) {
if (DocumentTypeEnum.RESIDENCE_CERTIFICATE.equals(employeeUploadTable.getContentType())) {
return employeeUploadTable;
}
}
}
return null;
}
public EmployeeUploadTable getBirthCertificate() {
if (employeeUploadTables != null) {
for (EmployeeUploadTable employeeUploadTable : employeeUploadTables) {
if (DocumentTypeEnum.BIRTH_CERTIFICATE.equals(employeeUploadTable.getContentType())) {
return employeeUploadTable;
}
}
}
return null;
}
public EmployeeUploadTable getDiploma() {
if (employeeUploadTables != null) {
for (EmployeeUploadTable employeeUploadTable : employeeUploadTables) {
if (DocumentTypeEnum.DIPLOMA.equals(employeeUploadTable.getContentType())) {
return employeeUploadTable;
}
}
}
return null;
}
public EmployeeUploadTable getMilitaryStatusCertificate() {
if (employeeUploadTables != null) {
for (EmployeeUploadTable employeeUploadTable : employeeUploadTables) {
if (DocumentTypeEnum.MILITARY_STATUS_CERTIFICATE.equals(employeeUploadTable.getContentType())) {
return employeeUploadTable;
}
}
}
return null;
}
public EmployeeUploadTable getHealthReport() {
if (employeeUploadTables != null) {
for (EmployeeUploadTable employeeUploadTable : employeeUploadTables) {
if (DocumentTypeEnum.HEALTH_REPORT.equals(employeeUploadTable.getContentType())) {
return employeeUploadTable;
}
}
}
return null;
}
public EmployeeUploadTable getWorkCertificate() {
if (employeeUploadTables != null) {
for (EmployeeUploadTable employeeUploadTable : employeeUploadTables) {
if (DocumentTypeEnum.WORK_CERTIFICATE.equals(employeeUploadTable.getContentType())) {
return employeeUploadTable;
}
}
}
return null;
}
public EmployeeUploadTable getPayroll() {
if (employeeUploadTables != null) {
for (EmployeeUploadTable employeeUploadTable : employeeUploadTables) {
if (DocumentTypeEnum.PAYROLL.equals(employeeUploadTable.getContentType())) {
return employeeUploadTable;
}
}
}
return null;
}
public EmployeeUploadTable getCriminalRecord() {
if (employeeUploadTables != null) {
for (EmployeeUploadTable employeeUploadTable : employeeUploadTables) {
if (DocumentTypeEnum.CRIMINAL_RECORD.equals(employeeUploadTable.getContentType())) {
return employeeUploadTable;
}
}
}
return null;
}
public void addEmployeeUpdateTable(List<EmployeeUploadTable> employeeUploadTableList) {
for (EmployeeUploadTable employeeUploadTable : employeeUploadTableList) {
employeeUploadTable.setEmployeeTable(this);
this.getEmployeeUploadTables().add(employeeUploadTable);
}
}
public Boolean isAllDocumentsUploaded(){
if(this.getBirthCertificate() == null || this.getResidenceCertificate() == null || this.getDiploma() == null
|| this.getMilitaryStatusCertificate() == null || this.getHealthReport() == null
|| this.getWorkCertificate() == null || this.getPayroll() == null || this.getCriminalRecord() == null){
return Boolean.FALSE;
}
return Boolean.TRUE;
}
}
EmployeeUploadTable
package de.adesso.kkBonus.model;
import de.adesso.kkBonus.enums.DocumentTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.hibernate.annotations.Cascade;
import org.springframework.beans.BeanUtils;
import javax.persistence.*;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "employee_upload_table")
@ToString(of = "id")
public class EmployeeUploadTable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "employee_fk")
private EmployeeTable employeeTable;
@Column(name = "name")
private String name;
@Column(name = "content_type")
@Enumerated(EnumType.STRING)
private DocumentTypeEnum contentType;
@Column(name = "content")
private byte[] content;
@Transient
public EmployeeUploadTable createCopy() {
EmployeeUploadTable target = new EmployeeUploadTable();
BeanUtils.copyProperties(this, target);
return target;
}
public EmployeeUploadTable(DocumentTypeEnum documentTypeEnum) {
this.setContentType(documentTypeEnum);
}
}
org.springframework.dao.InvalidDataAccessApiUsageException: object
ссылается на несохраненный временный экземпляр - сохраните временный экземпляр
перед сбросом: de.adesso.kkBonus.model.EmployeeTable; вложенными
Исключением является org.hibernate.TransientObjectException: ссылки на объекты
несохраненный временный экземпляр - сохраните временный экземпляр перед
промывка: de.adesso.kkBonus.model.EmployeeTable at
org.springframework.orm.hibernate4.SessionFactoryUtils.convertHibernateAccessException (SessionFactoryUtils.java:188)
в
org.springframework.orm.hibernate4.HibernateTransactionManager.convertHibernateAccessException (HibernateTransactionManager.java:681)
в
org.springframework.orm.hibernate4.HibernateTransactionManager.doCommit (HibernateTransactionManager.java:563)
в
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit (AbstractPlatformTransactionManager.java:757)
в
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit (AbstractPlatformTransactionManager.java:726)
в
org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning (TransactionAspectSupport.java:478)
в
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction (TransactionAspectSupport.java:272)
в
org.springframework.transaction.interceptor.TransactionInterceptor.invoke (TransactionInterceptor.java:95)
в
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:179)
в
org.springframework.aop.framework.JdkDynamicAopProxy.invoke (JdkDynamicAopProxy.java:207)
на com.sun.proxy. $ Proxy69.saveEmployee (Неизвестный источник) на
de.adesso.kkBonus.controller.impl.EmployeeControllerImpl.saveEmployee (EmployeeControllerImpl.java:219)
в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в
sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
в
sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
в java.lang.reflect.Method.invoke (Method.java:498) в
javax.el.BeanELResolver.invokeMethod (BeanELResolver.java:737) в
javax.el.BeanELResolver.invoke (BeanELResolver.java:467) в
javax.el.CompositeELResolver.invoke (CompositeELResolver.java:246) в
com.sun.el.parser.AstValue.invoke (AstValue.java:228) в
com.sun.el.MethodExpressionImpl.invoke (MethodExpressionImpl.java:297)
в
com.sun.faces.facelets.el.TagMethodExpression.invoke (TagMethodExpression.java:105)
в
javax.faces.event.MethodExpressionActionListener.processAction (MethodExpressionActionListener.java:147)
в javax.faces.event.ActionEvent.processListener (ActionEvent.java:88)
в
javax.faces.component.UIComponentBase.broadcast (UIComponentBase.java:813)
на javax.faces.component.UICommand.broadcast (UICommand.java:300) на
javax.faces.component.UIViewRoot.broadcastEvents (UIViewRoot.java:790)
в
javax.faces.component.UIViewRoot.processApplication (UIViewRoot.java:1282)
в
com.sun.faces.lifecycle.InvokeApplicationPhase.execute (InvokeApplicationPhase.java:81)
в com.sun.faces.lifecycle.Phase.doPhase (Phase.java:101) в
com.sun.faces.lifecycle.LifecycleImpl.execute (LifecycleImpl.java:198)
в javax.faces.webapp.FacesServlet.service (FacesServlet.java:646) в
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:305)
вorg.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:210)
в
org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:51)
в
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:243)
в
org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:210)
в
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:88)
в
org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107)
в
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:243)
в
org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:210)
в
de.adesso.kkBonus.filter.AuthorizationFilter.doFilter (AuthorizationFilter.java:38)
в
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:243)
в
org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:210)
на de.adesso.kkBonus.filter.LoginFilter.doFilter (LoginFilter.java:36)
в
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:243)
в
org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:210)
в
de.adesso.kkBonus.filter.AjaxExceptionFilter.doFilter (AjaxExceptionFilter.java:42)
в
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:243)
в
org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:210)
в
org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:222)
в
org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:123)
в
org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:502)
в
org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:171)
в
org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:100)
в
org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:953)
в
org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:118)
в
org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:408)
в
org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:1041)
в
org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:603)
в
org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint.java:312)
в
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149)
в
java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624)
at java.lang.Thread.run (Thread.java:748) Причина:
org.hibernate.TransientObjectException: объект ссылается на несохраненный
переходный экземпляр - сохраните временный экземпляр перед сбросом:
de.adesso.kkBonus.model.EmployeeTable at
org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved (ForeignKeys.java:294)
в org.hibernate.type.EntityType.getIdentifier (EntityType.java:537)
в org.hibernate.type.ManyToOneType.isDirty (ManyToOneType.java:311)
в org.hibernate.type.ManyToOneType.isDirty (ManyToOneType.java:321)
в org.hibernate.type.TypeHelper.findDirty (TypeHelper.java:294) в
org.hibernate.persister.entity.AbstractEntityPersister.findDirty (AbstractEntityPersister.java:4243)
в
org.hibernate.event.internal.DefaultFlushEntityEventListener.dirtyCheck (DefaultFlushEntityEventListener.java:546)
в
org.hibernate.event.internal.DefaultFlushEntityEventListener.isUpdateNecessary (DefaultFlushEntityEventListener.java:232)
в
org.hibernate.event.internal.DefaultFlushEntityEventListener.onFlushEntity (DefaultFlushEntityEventListener.java:159)
вorg.hibernate.event.internal.AbstractFlushingEventListener.flushEntities (AbstractFlushingEventListener.java:231)
в
org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions (AbstractFlushingEventListener.java:102)
в
org.hibernate.event.internal.DefaultFlushEventListener.onFlush (DefaultFlushEventListener.java:55)
в org.hibernate.internal.SessionImpl.flush (SessionImpl.java:1222)
в
org.hibernate.internal.SessionImpl.managedFlush (SessionImpl.java:425)
в
org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit (JdbcTransaction.java:101)
в
org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit (AbstractTransactionImpl.java:177)
в
org.springframework.orm.hibernate4.HibernateTransactionManager.doCommit (HibernateTransactionManager.java:555)
... еще 61