[jboss-user] [Persistence, JBoss/CMP, Hibernate, Database] - (debian, eclipse 3.4) "detached entity pased to persist"

lolveley do-not-reply at jboss.com
Tue Mar 3 14:08:43 EST 2009


hi,

I use eclipse and jboss 4.2.2.
I created a EAR project (enterprise application project) which contains 2 sub-projects : an EJB project which contains some EJB and a JPA entity, and a java project which contains the client "main" method.
here is my problem : nothing at the writing of the code, but an error at the deployment : anonymous wrote :  javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: source_jpa.customer.Customer
  | 	at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:629)
  | 	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:218)
  | 	at org.jboss.ejb3.entity.TransactionScopedEntityManager.persist(TransactionScopedEntityManager.java:182)
  | 	at ejb.customer.CustomerBean.createCustomer(CustomerBean.java:45)

the createCustomer method is the following : 
public Customer createCustomer(Customer customer, Address homeAddress) {
  | 		if (customer==null)
  | 			throw new ValidationException("customer object is null");
  | 		customer.setHomeAddress(homeAddress);
  | 		em.persist(customer);
  | 		
  | 		return customer;

I checked the mysql database, and the "t_customer" table exists but it is empty.

for a better understanding, here is the JPA class:
package source_jpa.customer;
  | 
  | import java.io.Serializable;
  | import java.util.Calendar;
  | import java.util.Date;
  | import java.util.GregorianCalendar;
  | 
  | import javax.persistence.CascadeType;
  | import javax.persistence.Column;
  | 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.OneToOne;
  | import javax.persistence.PostLoad;
  | import javax.persistence.PostPersist;
  | import javax.persistence.PostUpdate;
  | import javax.persistence.PrePersist;
  | import javax.persistence.PreUpdate;
  | import javax.persistence.Table;
  | import javax.persistence.Temporal;
  | import javax.persistence.TemporalType;
  | import javax.persistence.Transient;
  | 
  | import source_jpa.Address;
  | import source_jpa.exception.ValidationException;
  | 
  | //{|}
  | @Entity
  | @Table(name="t_customer")
  | public class Customer implements Serializable{
  | 	
  | 	@Id
  | 	@GeneratedValue(strategy=GenerationType.AUTO)
  | 	private Long id;
  | 	
  | 	@Column(unique=true,nullable=false,length=8)
  | 	private String login;
  | 	
  | 	@Column(nullable=false,length=8)
  | 	private String password;
  | 	
  | 	@Column(nullable=false,length=30)
  | 	private String firstname;
  | 	
  | 	@Column(nullable=false,length=30)
  | 	private String lastname;
  | 	
  | 	private String telephone;
  | 	private String email;
  | 	
  | 	@Column(name="date_of_birth")
  | 	@Temporal(TemporalType.DATE)
  | 	private Date dateOfBirth;
  | 	
  | 	@Transient
  | 	private Integer age;
  | 	
  | 	@OneToOne(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
  | 	@JoinColumn(name="address_fk",nullable=true)
  | 	private Address homeAddress;
  | 	
  | 	@PrePersist
  | 	@PreUpdate
  | 	private void validateData() throws ValidationException{
  | 		
  | 		if (firstname==null || firstname.equals(""))
  | 			throw new ValidationException("Invalid first name");
  | 		if (lastname==null || lastname.equals(""))
  | 			throw new ValidationException("Invalid last name");
  | 		if (login==null || login.equals(""))
  | 			throw new ValidationException("Invalid login");
  | 		if (password==null || password.equals(""))
  | 			throw new ValidationException("Invalid password");
  | 
  | 		}
  | 
  | 	@PostLoad
  | 	@PostPersist
  | 	@PostUpdate
  | 	public void calculateAge(){
  | 		
  | 		if (dateOfBirth==null){
  | 			age=null;
  | 			return;
  | 		}
  | 		Calendar birth=new GregorianCalendar();
  | 		birth.setTime(dateOfBirth);
  | 		Calendar now=new GregorianCalendar();
  | 		now.setTime(new Date());
  | 		int adjust=0;
  | 		if (now.get(Calendar.DAY_OF_YEAR)-birth.get(Calendar.DAY_OF_YEAR)<0)
  | 			adjust=-1;
  | 		age=now.get(Calendar.YEAR)-birth.get(Calendar.YEAR)+adjust;
  | 	
  | 	}

can you help me?
 
olivier.



View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4214654#4214654

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4214654



More information about the jboss-user mailing list