2010-12-28 3 views
0

Ich versuche, einen Namen, Wertpaar in Hibernate, die als Java Map zurückgegeben wird. Aber ich bekomme nur 1 der in der Map zurückgegebenen Zeilen. Ich habe keine wirklich klaren Beispiele für eine einfache Karte wie diese gefunden und kann nicht sehen, was ich falsch mache.Wie Name, Wertpaar über Java-Map in Hibernate zurückgegeben werden (mit Mapping-Datei)

Aufgrund einer eingeschränkten Umgebung kann ich hbm2dll nicht ausführen, um die Tabelle zu generieren, also habe ich es manuell generiert und es ist möglich, dass ich dort Fehler habe.

Hier sind meine Eltern und Kind Tabellen:

mysql> select * from zoomProperties; 
+----+---------------+ 
| id | entityVersion | 
+----+---------------+ 
| 1 |    0 | 
+----+---------------+ 
1 row in set (0.00 sec) 

mysql> select * from zoomProperty; 
+----+-------+-------+----------------------+ 
| id | name | value | parentZoomProperties | 
+----+-------+-------+----------------------+ 
| 1 | prop1 | val1 |     1 | 
| 2 | prop2 | val2 |     1 | 
| 3 | prop3 | val3 |     1 | 
+----+-------+-------+----------------------+ 
3 rows in set (0.00 sec) 

Aber ich nur einen Wert zurück:

2010-12-28 16:45:58,437 ERROR [STDERR] setProperties with: 
2010-12-28 16:45:58,453 ERROR [STDERR] Key: prop1 
2010-12-28 16:45:58,453 DEBUG [com.mycompany.zoom] Query returns 1 ZoomProperties 
2010-12-28 16:45:58,453 ERROR [STDERR] getProperties returning: 
2010-12-28 16:45:58,454 ERROR [STDERR] Key: prop1 
2010-12-28 16:45:58,454 DEBUG [com.mycompany.zoom] Key: prop1, Value: val1 
2010-12-28 16:45:58,454 DEBUG [com.mycompany.zoom] ZoomProperies returned 1 properties 

Hier ist meine Hibernate-Abfrage:

List resultList = em.createQuery("from ZoomProperties").getResultList(); 
log.debug("Query returns " + resultList.size() + " ZoomProperties"); 

Hier ist mein Zuordnungsdatei:

<hibernate-mapping> 
    <class name="com.mycompany.zoom.domain.ZoomProperties" table="zoomProperties"> 
    <id name="id"> 
     <generator class="increment"/> 
    </id> 
    <version name="entityVersion"/> 

    <map name="properties" table="zoomProperty"> 
     <key column="id"/> 
     <map-key column="name" type="string"/> 
     <element column="value" type="string"/> 
    </map> 
    </class> 
</hibernate-mapping> 

Und mein pojo:

package com.mycompany.zoom.domain; 

import java.util.HashMap; 
import java.util.Map; 

public class ZoomProperties 
{ 
    private Long id; 
    private Map<String, String> properties = new HashMap<String, String>(); 
    private Integer entityVersion; 

    public ZoomProperties() {} 

    public Long getId() { return id; } 
    public void setId(Long id) { this.id = id; } 

    public Map<String, String> getProperties() //{ return properties; } 
    { 
     System.err.println("getProperties returning:"); 
     java.util.Set<String> propertyKeySet = properties.keySet(); 
     for (String key : propertyKeySet) 
     { 
      System.err.println("\tKey: " + key); 
     } 
     return properties; 
    } 
    public void setProperties(Map<String, String> properties) //{ this.properties = properties; } 
    { 
     this.properties = properties; 
     System.err.println("setProperties with:"); 
     java.util.Set<String> propertyKeySet = properties.keySet(); 
     for (String key : propertyKeySet) 
     { 
      System.err.println("\tKey: " + key); 
     } 
    } 

    public Integer getEntityVersion() { return entityVersion; } 
    public void setEntityVersion(Integer entityVersion) { this.entityVersion = entityVersion; } 

    public boolean equals(Object other) { 
     if (other == this) 
     { 
      return true; 
     } 
     if (other instanceof ZoomProperties) 
     { 
      return true; 
     } 
     return false; 
    } 

    public int hashCode() { 
     return "This is the one and only ZoomProperties".hashCode(); 
    } 
} 

Und meine Tabellenerstellung Info:

mysql> show create table zoomProperties; 
+----------------+---------------------------------+ 
| Table   | Create Table     | 
+--------------------------------------------------+ 
| zoomProperties | CREATE TABLE `zoomProperties` (
    `id` bigint(20) NOT NULL auto_increment, 
    `entityVersion` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1    | 
+----------------+---------------------------------+ 
1 row in set (0.00 sec) 

mysql> show create table zoomProperty; 
+--------------+-----------------------------------+ 
| Table  | Create Table      | 
+--------------+-----------------------------------+ 
| zoomProperty | CREATE TABLE `zoomProperty` (
    `id` bigint(20) NOT NULL auto_increment, 
    `name` varchar(255) NOT NULL, 
    `value` varchar(255) default NULL, 
    `parentZoomProperties` bigint(20) default NULL, 
    PRIMARY KEY (`id`), 
    KEY `parentZoomProperties` (`parentZoomProperties`), 
    CONSTRAINT `zoomProperty_ibfk_1` 
    FOREIGN KEY (`parentZoomProperties`) 
    REFERENCES `zoomProperties` (`id`) 
    ON DELETE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=latin1    | 
+--------------+-----------------------------------+ 
1 row in set (0.00 sec) 

Antwort

0

<key> Element innerhalb <map> bezieht sich auf die Fremdschlüssel, so sollte es

<map name="properties" table="zoomProperty"> 
    <key column="parentZoomProperties"/> 
    <map-key column="name" type="string"/> 
    <element column="value" type="string"/> 
</map> 

id sein in zoomProperty Tabelle wird überhaupt nicht benötigt.

+0

Ja, tatsächlich - das war die Information, die ich brauchte! Danke danke danke!!! – Ilane

Verwandte Themen