When I save entiti with the same name as I already have in the database, I get this export:
SEVERE: Servlet.service () for servlet [spring-servlet] in context with path [/ medphoto] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: object reference an unsaved transient instance — save the transient instance before flushing: com.generatedesign.medphoto.core.entity.Profile; nested exception is org.hibernate.TransientObjectException: object reference and transient instance for flushing: com.generatedesign.medphoto.core.entity.Profile] with root cause org.hibernate.TransientObjectException: object reference an unsaved transient instance - save the transient instance before flushing: com.generatedesign.medphoto.core.entity.Profile at org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved (ForeignKeys.java:294) at org.hibernate.type.EntityType.getItext .java: 537) at org.hibernate.type. TypeHelper.java:294) at org.hibernate.persister.entity.AbstractEntityPersister.findDirty (AbstractEntityPersister.java:4243) at org.hibernate.event.internal.DefaultFlushEntityEventListener.dirtyCheck (DefaultFlushEntityElELETeleLEntLIntlEntlEntlEntlEntlEntlEntlEntityEntityEntityEventListener. ernate.jpg java: 231) at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions (AbstractFlushingEventListener.java:102) at org.hibernate.event.internal.DefaultFlushEventListener.onFlush (DefaultFlushEvent.delivery.deferable.event.internal.DefaultFlushEventListener.onFlush (DefaultFlushEvent.internal.event.internal.DefaultFlushEventListener.onFlushEventListenE.pliteEventListener.liberEeveryLeventListener.liberEevery.event.internal.AbstractFlushingEventListener.flushE. .flush (SessionImpl.java:1222) at org.hibernate.internal.SessionImpl.managedFlush (SessionImpl.java getting rid of 25) at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit (JdbcTefax in replication (JdbcTransaction.beforeTransactionCommit (JdbcTransaction def. replication in jdbcTransaction.java1225)) org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit (AbstractTransactionImpl.java:177) at org.springframework.orm.hibernate4.HibernateTransaction Manager.doCommit (HibernateTransactionManager.java -555) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit (modernPspech.org.e.uk.azh.degenerate.http .spring in the world .java: 95) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework. $ Proxy54.add (Unknown Source) at com.generatedesign.medphoto.web.controller.Patien tController.create (PatientController.java:126)
In the database for this field there is no ladies, no triggers, nothing. By this very strange behavior. Self entiti:
@Entity @Table(name = "Profile") public class Profile implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "profileId") private long profileId; @Column(name = "FirstName") private String firstName; @Column(name = "LastName") private String lastName; @Column(name = "MiddleName") private String middleName; @Column(name = "phone") private Long phone; @Column(name = "email") private String email; @Column(name = "BirthDate") @Temporal(TemporalType.TIMESTAMP) private Calendar birthDate; @Temporal(TemporalType.TIMESTAMP) @Column(nullable = false, updatable = false) private Calendar createdDate; @ManyToOne @JoinColumn(name = "CreatedUser", updatable = false, insertable = true) private Profile createdUser; @Temporal(TemporalType.TIMESTAMP) @Column(name = "UpdatedDate") private Calendar updatedDate; @ManyToOne @JoinColumn(name = "UpdatedUser", updatable = true, insertable = true) private Profile updatedUser; @Type(type = "org.hibernate.type.YesNoType") @Column(name = "ACTIVE", length = 1) private Boolean active = Boolean.TRUE; @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @Fetch(FetchMode.SUBSELECT) @JoinTable(name = "AddressProfileMap", joinColumns = @JoinColumn(name = "ProfileId"), inverseJoinColumns = @JoinColumn(name = "AddressId")) private List<Address> address; @OneToOne(mappedBy = "profile", cascade=CascadeType.ALL) private Account account; // getters setters }
Service:
@Override @HTransactional public void add(Profile profile) throws BaseException { Profile existing = getProfile(profile.getFirstName(), profile.getLastName(), profile.getBirthDate()); if (existing == null) { dao.add(profile); } else { profile = existing; } }
DAO:
in tao, the save method is called, which is described below:
@Override public Serializable save(final Object paramObject) throws BaseException { return ((Serializable) execute(new Executor() { public Object execute(Session session) throws BaseException { return (Serializable) session.save(paramObject); } })); }
CascadeType.ALL
to take in braces) - I. Smirnov