HSQL Abfrage Hibernate

MrOTJ

Mitglied
Hi miteinander, also folgendes:

ich habe eine mit Collection of Elements in einer Klasse:


Code:
class MyOwnList
{
   String key;
   HashSet values;

 ......
@Collection of Elements
  public Set getValues() {
     return this.values;
}
}


Hibernate mappt mir die values in eine Spalte namens element!


Nun hab ich es einfach nicht geschafft, eine HSQL Abfrage zu machen, die mir zu einem Value die Liste(oder Listen) liefert
Code:
   hibernateTemplate.find(from List l where l.values.element = ?, value) klappt nicht!


Gibt es überhaupt eine Möglichkeit dies abzufragen?
Ich hätte es gern in einer Collection, also in eine ArrayList möchte ich die Values nicht mappen!

Vorschläge?

Bedanke mich schon im voraus und wünsch euch erst mal ne gute Montag Nacht!

Otti
 
Hi,
ich kenne deine "@Collection of Elements"-Annotationt zwar nicht, aber soweit ich weiß, muss es zumindest so heißen, damit Hibernate überhaupt weiß, welche Klasse du meinst:
Code:
hibernateTemplate.find(from MyOwnList l where l.values.element = ?, value)

Grüße,
Peter
 
Das war nur ein Schriebfehler von mir!

Meine Klasse ist eigentlich ziemlich simpel :


Code:
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.Hibernate;
import org.hibernate.annotations.CollectionOfElements;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

/**
 * Repräsentiert einen Characteristica 
 * Sie besitzt immer einen Key und eine dazugehorige Liste von Werten
 */
@Entity
@SuppressWarnings("serial")
@Table(name = "characteristic")
public class Characteristic implements Serializable {

    private Integer id;
    private String clue;
    //TODO Hashset?
    private Set<String> values = new HashSet<String>();
    /**
     * Default-Konstructor fuer Hibernate
     */
    public Characteristic() {	
    	values = new HashSet<String>();
    }

    /**
     * Konstruktor zur Initialisierung.
     * @param clue der Schlüssel des caharcteristica
     * @param values die Werte des Characteristicas als Liste
     */
    public Characteristic(String clue, Set<String> values) {
        this();
    	this.clue = clue;
        this.values = values;
    }

    /**
     * Konstruktor zur Initialisierung.
     * @param clue der Schlüssel einer Eigenschaft eines Promoters
     * @param value der Wert einer Eigenschaft eines Promoters
     */
    public Characteristic(String clue, String value) {
        this();
    	this.clue = clue;
        this.values.add(value);
    }
    
    /**
     * Konstruktor zur Initialisierung.
     * @param characteristicId die Id der Eigenschaft
     */
   public Characteristic(Integer characteristicId) {
       this(); 
	   this.id = characteristicId;
    }

	/**
	 * @return the Id of a Characteristic
	 */
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
	/**
	 * @return the Clue of a Characteristic
	 */
    @Basic
    @Column(name = "char_clue", length = 63, nullable = false, unique = false)
    public String getClue() {
        return clue;
    }

    /**
	 * @param the clue of a characteristic
	 */
    public void setClue(String clue) {
        this.clue = clue;
    }
	
    /**
	 * @return the values of a special characteristic as a String-Array
	 */
    @CollectionOfElements
     public Set<String> getValues() {
        return values;
    }

    /**
	 * @param values set the values to a clue of a characteristic as String-Array
	 */
    public void setValues(Set<String> values) {
        this.values = values;
    }

    
    /**
	 * @param value add a value to the Characteristic
	 */
    public void addValue(String value) {
        this.values.add(value);
    }
    
    /**
     * zusammengesetzten Business Keys.
     */
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
        final Characteristic characteristic = (Characteristic) o;
        if (clue != null ? !clue
                .equals(characteristic.clue)
                : characteristic.clue != null) return false;
        if (values != null ? !values.equals(characteristic.values)
                : characteristic.values != null) return false;
        return true;
    }

    /**
     * Demonstriert die Implementation von hashcode auf der Basis eines
     * zusammengesetzten Business Keys.
     */
    @Override
    public int hashCode() {
        int result;
        result = (values != null ? values.hashCode() : 0);
        result = 29
                * result
                + (clue != null ? clue.hashCode() : 0);
        return result;
    }

}


und meine Abfrage (inzwischen):

Code:
(from Characteristic c where :value in (elements(c.values)),"value";value)

doch da bekomme ich kein ergebnis, obwohl ich definitv einen Satz im der DB habe!

ich hab das schon als List gemappt und per Criteria probiert(geht nicht per CollectionOfElemnt, nur bei Entitys), doch alles funktioniert nicht und ich bin immer noch nicht in der Lage diese abfrage durchzuführen!
Es ist echt zum verzweifeln, das müsset doche eigentlich trivial sein!

Keiner andere Vorschläge, wie man so etwas realisiert?
 
Zurück