-->
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.  [ 3 posts ] 
Author Message
 Post subject: Zusammengesetzter Key in Hibernate
PostPosted: Fri Jan 07, 2011 12:40 am 
Newbie

Joined: Thu Jan 06, 2011 2:01 am
Posts: 5
Hallo,

ich versuche seit Tagen, einen zusammengesetzten Primärschlüssel in Hibernate zu realisieren.
Was ich erreichen will:

Primärschlüssel: user_id(Fremdschlüssel), project_id(Fremdschlüssel), property_name
Spalte: property_value

Schließlich soll also jeder Kombination aus user_id, project_id, property_name eine property_value zugeordnet werden.

Mein Code bis jetzt:

Code:
@Entity
@Table(name = "user_properties")
@AssociationOverrides({
   @AssociationOverride(name="id.user", joinColumns = @JoinColumn(name="user_id", nullable=false)),
   @AssociationOverride(name="id.project", joinColumns = @JoinColumn(name="project_id", nullable=false))
})
@AttributeOverrides({
   @AttributeOverride(name = "id.property_name", column = @Column(name = "property_name", nullable = false))
})
public class WebAppUserProperty implements Serializable {
   private static final long serialVersionUID = -1325251396121465392L;

   @EmbeddedId
   private UserPropertyPK id = new UserPropertyPK();

   @Column(name = "property_value", nullable = false)
   private String property_value; // value

   // Getter, Setter, ...
}
@Embeddable
class UserPropertyPK implements Serializable {
   private static final long serialVersionUID = 572566244363842292L;

   @ManyToOne
   private WebAppUser user; // user

   @ManyToOne
   private WebAppProject project; // project

   @Column(name = "property_name", nullable = false)
   private String property_name; // name

   @Override
   public boolean equals(Object obj) {
      if (this == obj) {
         return true;
      }
      if (!(obj instanceof UserPropertyPK)) {
         return false;
      }

      final UserPropertyPK castOther = (UserPropertyPK) obj;

      return new EqualsBuilder().append(user, castOther.user)
            .append(project, castOther.project).append(property_name, castOther.property_name).isEquals();
   }

   @Override
   public int hashCode() {
      return new HashCodeBuilder().append(user).append(project).append(property_name).toHashCode();
   }

   // Getter, Setter, ...
}


In meiner DAO-Klasse habe ich folgenden Code:
Code:
@Override
public void setProperty(WebAppUserProperty webAppUserProperty) {
   sessionFactory.getCurrentSession().saveOrUpdate(webAppUserProperty);
}


Wenn die Tabelle "user_properties" leer ist, wird kein neuer Eintrag erstellt.
Wenn ein Eintrag bereits vorhanden ist, der einen unterschiedlichen Primärschlüssel besitzt wie der Eintrag, der hinzugefügt werden soll, passiert auch nichts.
Existiert hingegen bereits ein Eintrag mit dem gleichen Primärschlüssel, wird folgende Exception ausgelöst:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [de.tu_darmstadt.bp.global.model.WebAppUserProperty#de.tu_darmstadt.bp.global.model.UserPropertyPK@ee341dbe]

Gleichzeitig bekomme ich in der Konsole
"ERROR DefaultConverterManager:399 - No converter found for 'de.tu_darmstadt.bp.global.model.UserPropertyPK'"
angezeigt. (Wobei das anscheinend nichts mit Hibernate sondern mit DWR zu tun hat, was ich verwende)

Vielleicht kann mir hier jemand helfen.


Top
 Profile  
 
 Post subject: Re: Zusammengesetzter Key in Hibernate
PostPosted: Fri Jan 07, 2011 2:02 am 
Newbie

Joined: Thu Jan 06, 2011 2:01 am
Posts: 5
Hallo,

die Exception ist nun weg (ich habe verstanden, warum sie erschienen ist - ich habe ein neues Objekt erstellt mit selben Primärschlüssel wie bereits in der DB vorhanden. Das darf in Hibernate nicht sein - man muss sich also erst das bereits vorhandene Objekt aus der DB holen und dann dieses verändern).

Leider funktioniert saveOrUpdate() immer noch nicht. Es wird gar nichts gemacht, wenn ich die Funktion aufrufe.


Top
 Profile  
 
 Post subject: Re: Zusammengesetzter Key in Hibernate
PostPosted: Fri Jan 07, 2011 2:27 am 
Newbie

Joined: Thu Jan 06, 2011 2:01 am
Posts: 5
Hallo,

ein "sessionFactory.getCurrentSession().flush();" hat komischerweise ein INSERT veranlasst.

Warum, weiß ich nicht genau...


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

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.