-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Hibernate @Version annotation and object references an unsav
PostPosted: Thu Sep 19, 2013 2:38 pm 
Newbie

Joined: Thu Sep 19, 2013 2:34 pm
Posts: 2
My New Project is in Hibernate 4.2.5.Final and Spring. After Login, I am storing the user object in the session. Now after successful login, I need to insert one record in the application log. Here are the classes:

Code:
@MappedSuperclass
public abstract class BaseEntity implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long ID;
    @Version
    private Long version;
    private Long createdBy;
    @Temporal(value = TemporalType.TIMESTAMP)
    private Date createdDate;
    private Long updatedBy;
    @Temporal(value = TemporalType.TIMESTAMP)
    private Date updatedDate;
    private String deactivatedReason;
    private String activatedReason;
    private Integer active;

    public long getID() {
        return ID;
    }

    public void setID(long iD) {
        ID = iD;
    }

    public Long getVersion() {
        return version;
    }

    public void setVersion(Long version) {
        this.version = version;
    }

    public Long getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(Long createdBy) {
        this.createdBy = createdBy;
    }

    public Date getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(Date createdDate) {
        this.createdDate = createdDate;
    }

    public Long getUpdatedBy() {
        return updatedBy;
    }

    public void setUpdatedBy(Long updatedBy) {
        this.updatedBy = updatedBy;
    }

    public Date getUpdatedDate() {
        return updatedDate;
    }

    public void setUpdatedDate(Date updatedDate) {
        this.updatedDate = updatedDate;
    }

    public String getDeactivatedReason() {
        return deactivatedReason;
    }

    public void setDeactivatedReason(String deactivatedReason) {
        this.deactivatedReason = deactivatedReason;
    }

    public String getActivatedReason() {
        return activatedReason;
    }

    public void setActivatedReason(String activatedReason) {
        this.activatedReason = activatedReason;
    }

    public Integer getActive() {
        return active;
    }

    public void setActive(Integer active) {
        this.active = active;
    }

}


Code:
package com.product.domain;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.validation.constraints.Pattern;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank;

import com.product.audit.IAuditLog;
import com.product.domain.base.BaseEntity;

@Entity
@Table(name = "users")
@NamedQueries({ @NamedQuery(name = "Users.findUserByUserID", query = "SELECT usr  FROM Users  as usr WHERE usr.userName = ? and usr.practice.code = ?") })
public class Users extends BaseEntity implements IAuditLog {


    private String userName;
    private String password;

    // bi-directional many-to-one association to Practice
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "practiceID")
    private Practice practice;
    //getters and setters
}


Code:
package com.product.domain;

import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "applicationevents")
public class ApplicationEvents {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long ID;

    @Temporal(value = TemporalType.TIMESTAMP)
    private Date eventDate;
    private String comments;
    private Integer eventType;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "practiceID")
    private Practice practice;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "userID")
    private Users userID;

    //getters and setters

}

ApplicationEvents appEvent = new ApplicationEvents();
        appEvent.setEventType(eventType);
        appEvent.setPractice(practice);
        appEvent.setUserID(userID);
        appEvent.setComments(comments);
        appEvent.setEventDate(new Timestamp(new Date().getTime()));
        CRUDService.Save(appEvent);


When I try to save ApplicationEvent, I am getting the following error:

18:34:34.540 [http-bio-8080-exec-8] INFO c.p.a.MyUserDetailsService - Logged User authentication sucess. UserName admin and practice Name Physicians Choice Laboratory
Hibernate:
/* insert com.product.domain.ApplicationEvents
*/ insert
into
applicationevents
(comments, eventDate, eventType, practiceID, userID)
values
(?, ?, ?, ?, ?)
19 Sep, 2013 6:34:34 PM org.zkoss.bind.impl.ParamCall call:117
SEVERE:
org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: com.product.domain.Users; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.product.domain.Users
at org.springframework.orm.hibernate4.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:166)
at org.springframework.orm.hibernate4.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:680)
at org.springframework.orm.hibernate4.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:562)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:755)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:724)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:475)

Very Important Note: When I remove the @Version in the base entity, everything works fine


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.