[jboss-user] [JBoss Seam] - Entity relation deleated

mhiggins do-not-reply at jboss.com
Sun Oct 21 09:35:36 EDT 2007


This may be an EJB3 question but I am new to both and working with seam ? I have a many to many unidirectional relation. I have a simple from to build these objects / relations up and that works fine. In another form I am trying to work on instances of the object graph but when I display the page the last line in the log is:


  | 09:09:27,174 INFO  [STDOUT] Hibernate: delete from Profile_Location where profile_id=?
  | 09:09:27,225 INFO  [STDOUT] Hibernate: delete from Profile_Location where profile_id=?
  | 09:09:27,226 INFO  [STDOUT] Hibernate: delete from Profile_Location where profile_id=?
  | 

I have no delete calls in my code and can't figure out where this is coming from. There are 3 users in the system and that corresponds to the  3 delete calls above. Are my relations mapped wrong? Here is the code for the relations. I have a user and a user has a profile and the profile can have many locations, i.e. a person can have more then one address. The main question is why are these relations being deleted? 

User Entity


  | @Entity
  | @Name("user")
  | public class User implements Serializable {
  | 	
  |         ...
  |         private Profile profile; 
  | 	...
  |         @OneToOne(cascade = CascadeType.ALL)
  | 	@JoinColumn(name = "profile_id")
  | 	public Profile getProfile() {
  | 		return profile;
  | 	}
  | 
  | 	public void setProfile(Profile profile) {
  | 		this.profile = profile;
  | 	}
  | }
  | 

Profile Entity 


  | @Entity
  | @Name("profile")
  | public class Profile implements Serializable {
  | 	...
  |         private Set<Location>locations; 
  |         ....
  |   	@ManyToMany
  | 	@JoinTable(name="Profile_Location", 
  | 				joinColumns={@JoinColumn(name="profile_id")},
  | 			inverseJoinColumns={@JoinColumn(name="location_id")})
  | 	public Set<Location> getlocations() {
  | 		return locations;
  | 	}
  |     
  | 	public void setlocations(Set<Location> locations) {
  | 		locations = locations;
  | 	}      
  | }
  | 

Location Entity. I want the Location to be associated with other types of objects(non just profiles ) there is no reference to the Profile in the Locaiton. 


  | @Entity
  | @Name("location")
  | public class Location implements Serializable {
  | 	...
  | }
  | 

DistanceCalcAction, this is the statefull session bean that is using the Location entities to calcualte distance between users. 


  | @Stateful
  | @Scope(EVENT)
  | @Name("distanceCalc")
  | public class DistanceCalcAction implements DistanceCalc {
  | 	
  | 	@Logger Log log;
  | 	
  | 	@PersistenceContext
  | 	private EntityManager em;
  | 
  | 	private User fromUser; 
  | 
  | 	private User toUser; 
  | 		  
  | 	@In
  | 	private FacesMessages facesMessages;
  | 	
  | 	@Out
  | 	private List<User> users; 
  | 	
  | 	@Out(required=false)
  | 	private Double distance;
  | 	
  | 	@Create
  | 	public void getUsers(){
  | 		users = (List<User>)em.createQuery("SELECT u from User as u").getResultList();
  | 	}
  | 	
  | 	public void calc(){
  | 	
  | 		Distance distanceTool = new Distance();
  | 		
  | 		User from = (User) em.createQuery("SELECT u FROM User u WHERE u.id = :id").setParameter("id",fromUser.getId()).getSingleResult();
  | 		User to = (User) em.createQuery("SELECT u FROM User u WHERE u.id = :id").setParameter("id",toUser.getId()).getSingleResult();
  | 	
  | 		distance = distanceTool.distanceVincenty(
  | 				from.getProfile().getDefaultLocation().getLatitude(), 
  | 				from.getProfile().getDefaultLocation().getLongitude(),
  | 				to.getProfile().getDefaultLocation().getLatitude(), 
  | 				to.getProfile().getDefaultLocation().getLongitude(), Distance.FORMAT_MILES);
  | 	}
  | 	
  | 	@Factory("fromUser")
  | 	public User getFromUser() {
  | 		fromUser = new User();
  | 		return fromUser;
  | 	}
  | 	@Factory("toUser")
  | 	public User getToUser() {
  | 		toUser = new User();
  | 		return toUser;
  | 	}
  | 
  | 	public void setFromUser(User fromUser) {
  | 		this.fromUser = fromUser;
  | 	}
  | 
  | 	public void setToUser(User toUser) {
  | 		this.toUser = toUser;
  | 	}
  | 	@Destroy @Remove
  | 	public void destroy() {}
  | 
  | }
  | 

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

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



More information about the jboss-user mailing list