-->
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: IBM DB2-Indexproblem Map<String,String>, Value>256B
PostPosted: Thu Apr 10, 2008 11:11 am 
Newbie

Joined: Thu Apr 10, 2008 10:39 am
Posts: 2
Hi,

ich versuche gerade herauszufinden, wie ich denn eine Map<String,String> sinnvoll persistieren kann. Der Key ist dabei recht klein (<= 255 Zeichen), die Values können unter Umständen mehrere KB gross werden.

Mein momentaner Ansatz mit Hilfe von Hibernate Annotations sieht so aus:
Code:
@CollectionOfElements
   @MapKey(columns=@Column(nullable=false,name="key"))
   @Column(length=1024*1024,name="value")
   private Map<String, String> headers;


Das generierte SQL sieht dann folgendermaßen aus:

Code:
    create table RawPage_headers (
        RawPage_id bigint not null,
        value varchar(1048576),
        key varchar(255) not null,
        primary key (RawPage_id, key)
    );


Bei der Auführung dieses Statements meint die DB2-Datenbank folgendes:
SQL0604N Das Attribut 'Length', 'Precision' oder 'Scale' für die Spalte, den
einzigartigen Datentyp, den strukturierten Typ, den Feldgruppentyp oder das Attribut eines strukturierten Typs, einer Routine, eines Umsetzungszieltyps, einer Typenzuordnung oder globalen Variablen "varchar(1048576)" ist ungültig. SQLSTATE=42611

Das verstehe ich so, dass ein varchar einfach nicht so gross sein darf.

Mein nächster Versuch war es, den Typ des Values zu ändern. Sowohl @Lob als auch @Type(type="text") führen zu folgendem SQL:

Code:
    create table RawPage_headers (
        RawPage_id bigint not null,
        value clob(1048576),
        key clob(255) not null,
        primary key (RawPage_id, key)
    );


Das sieht zwar schon besser aus, führt dann aber zu Problemen beim Index: SQL0350N Die Spalte "KEY" des Typs LOB, LONG VARCHAR, DATALINK, XML oder des strukturierten Typs kann nicht in einem Index, einem Schlüssel, einer eindeutigen Integritätsbedingung, einer funktionalen Abhängigkeit, einer generierten Spalte oder einer deklarierten temporären Tabelle verwendet werden. SQLSTATE=42962

Gibt es also eine Möglichkeit, den Key als varchar zu belassen, während der Wert ein clob ist?
Ich habe nach Dinge wie @KeyType oder @MapKey(columns=@Column(nullable=false,name="key",type="irgendwas"))
gesucht, finde dazu aber leider nichts.

Vielen Dank schonmal fürs Lesen!

Hier noch weitere Infos zur verwendeten Software:
Hibernate version: 3.2
Mapping documents: in Annotations, Version 3.3.1 CR1
Code between sessionFactory.openSession() and session.close(): Problem tritt schon vorher auf
Full stack trace of any exception that occurs: -
Name and version of the database you are using: IBM DB2 Express-C 9.5.0
The generated SQL (show_sql=true): siehe oben
Debug level Hibernate log excerpt:
Code:
[hibernatetool] 17:06:21,962 main  INFO EntityBinder:424 - Bind entity testpackage.RawPage on table RawPage
[hibernatetool] 17:06:21,962 main DEBUG AnnotationBinder:1022 - Processing testpackage.RawPage property annotation
[hibernatetool] 17:06:21,978 main DEBUG AnnotationBinder:1022 - Processing testpackage.RawPage field annotation
[hibernatetool] 17:06:22,009 main DEBUG AnnotationBinder:1134 - Processing annotations of testpackage.RawPage.id
[hibernatetool] 17:06:22,009 main DEBUG Ejb3Column:161 - Binding column id unique false
[hibernatetool] 17:06:22,009 main DEBUG AnnotationBinder:1259 - id is an id
[hibernatetool] 17:06:22,009 main DEBUG SimpleValueBinder:220 - building SimpleValue for id
[hibernatetool] 17:06:22,009 main DEBUG PropertyBinder:129 - Building property id
[hibernatetool] 17:06:22,009 main DEBUG PropertyBinder:182 - Cascading id with null
[hibernatetool] 17:06:22,009 main DEBUG AnnotationBinder:1296 - Bind @Id on id
[hibernatetool] 17:06:22,009 main DEBUG AnnotationBinder:1134 - Processing annotations of testpackage.RawPage.content
[hibernatetool] 17:06:22,009 main DEBUG Ejb3Column:161 - Binding column content unique false
[hibernatetool] 17:06:22,009 main DEBUG PropertyBinder:107 - binding property content with lazy=false
[hibernatetool] 17:06:22,009 main DEBUG SimpleValueBinder:220 - building SimpleValue for content
[hibernatetool] 17:06:22,025 main DEBUG PropertyBinder:129 - Building property content
[hibernatetool] 17:06:22,025 main DEBUG PropertyBinder:182 - Cascading content with null
[hibernatetool] 17:06:22,025 main DEBUG AnnotationBinder:1134 - Processing annotations of testpackage.RawPage.headers
[hibernatetool] 17:06:22,025 main DEBUG Ejb3Column:161 - Binding column value unique false
[hibernatetool] 17:06:22,025 main DEBUG Ejb3Column:161 - Binding column null unique false
[hibernatetool] 17:06:22,025 main DEBUG Ejb3Column:161 - Binding column null unique false
[hibernatetool] 17:06:22,041 main DEBUG Ejb3Column:161 - Binding column value unique false
[hibernatetool] 17:06:22,041 main DEBUG Ejb3Column:161 - Binding column key unique false
[hibernatetool] 17:06:22,041 main DEBUG Ejb3Column:161 - Binding column null unique false
[hibernatetool] 17:06:22,056 main DEBUG Ejb3Column:161 - Binding column null unique false
[hibernatetool] 17:06:22,056 main DEBUG Ejb3Column:161 - Binding column null unique false
[hibernatetool] 17:06:22,056 main DEBUG CollectionBinder:290 - Collection role: testpackage.RawPage.headers
[hibernatetool] 17:06:22,056 main DEBUG PropertyBinder:129 - Building property headers
[hibernatetool] 17:06:22,056 main DEBUG PropertyBinder:182 - Cascading headers with null


Top
 Profile  
 
 Post subject:
PostPosted: Mon Apr 21, 2008 4:55 pm 
Expert
Expert

Joined: Tue Nov 23, 2004 7:00 pm
Posts: 570
Location: mostly Frankfurt Germany
Im test package des Hibernate Annoations Download gibt es viele Beispiele.

_________________
Best Regards
Sebastian
---
Training for Hibernate and Java Persistence
Tutorials for Hibernate, Spring, EJB, JSF...
eBook: Hibernate 3 - DeveloperGuide
Paper book: Hibernate 3 - Das Praxisbuch
http://www.laliluna.de


Top
 Profile  
 
 Post subject:
PostPosted: Tue Apr 29, 2008 8:57 am 
Newbie

Joined: Thu Apr 10, 2008 10:39 am
Posts: 2
Hi,

ich habe mir das test-Package mal genauer angeschaut, finde da leider aber nichts, was mir weiterhelfen würde - die meisten Sachen beziehen sich eher auf @JoinTable oder @ManyToOne-Mappings. Für eine @CollectionOfElements habe ich keine Möglichkeit gefunden, den Typ des Keys zu manipulieren.

Auch ein Versuch mit
Code:
@CollectionId(generator="identity",type=@Type(type="text"),columns=@Column(nullable = false, name = "key"))
half nichts - anscheinend wird der Typ da gar nicht benutzt, denn ich kann auch "sdfsdfsd" statt "text" eintragen, und es ändert sich nichts.

Gibt es ein passendes Stichwort, damit ich gezielter suchen kann?


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.