-->
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.  [ 7 posts ] 
Author Message
 Post subject: Legacy table mapping (enthält Liste von Listen)
PostPosted: Wed May 09, 2007 1:37 am 
Newbie

Joined: Tue Jun 28, 2005 10:20 am
Posts: 15
Hallo,
mein Problem ist eine legacy Tabelle ohne primary key in Java zu mappen.Die Tabelle hat auch keine foreign keys.

In der Tabelle steht eine Liste von Listen.
Ausgelesen werden soll ein Feldplan für ein Experiment.
Ein fieldplan Hat eine Liste von Lanes die wiederum eine Liste von Plots enthalten.
mysql> desc FIELDPLAN;
Code:
+-----------------------+-------------+------+-----+---------+-------+
| Field                 | Type        | Null | Key | Default | Extra |
+-----------------------+-------------+------+-----+---------+-------+
| ExperimentID          | varchar(55) | YES  |     | NULL    |       |
| TreatmentCode         | varchar(15) | YES  |     | NULL    |       |
| Block                 | varchar(15) | YES  |     | NULL    |       |
| HolderFAOCode         | varchar(10) | YES  |     | NULL    |       |
| AccessionNumber       | varchar(35) | YES  |     | NULL    |       |
| IncreaseID            | varchar(55) | YES  |     | NULL    |       |
| TransactionID         | varchar(55) | YES  |     | NULL    |       |
| Lane                  | smallint(6) | YES  |     | NULL    |       |
| Plot                  | int(11)     | YES  |     | NULL    |       |
[some attributes....]
+-----------------------+-------------+------+-----+---------+-------+


Ein Beispiel Inhalt der Tabelle:
mysql> select ExperimentID,Block,Lane,Plot,StockSite,TreatmentCode,HolderFAOCode,AccessionNumber,Status from FIELDPLAN order by Exper
Code:
+--------------------------+-------+------+------+-----------------+---------------+---------------+-----------------+----------+
| ExperimentID             | Block | Lane | Plot | StockSite       | TreatmentCode | HolderFAOCode | AccessionNumber | Status   |
+--------------------------+-------+------+------+-----------------+---------------+---------------+-----------------+----------+
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    1 |    1 | NULL            | NULL          | SW            | SW              | Marker   |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    1 |    2 | DEUQue_BAZReurs | Ten rows      | DEU146        | AVE 3095        | Project  |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    1 |    3 | NULL            | Ten rows      | BGR001        | A7BM0011        | Standard |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    1 |    4 | DEUQue_BAZReurs | Ten rows      | SWE002        | NGB6360         | Project  |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    1 |    5 | DEUQue_BAZReurs | Ten rows      | DEU146        | AVE 4488        | Project  |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    2 |    1 | DEUQue_BAZReurs | Ten rows      | SWE002        | NGB2710         | Project  |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    2 |    2 | NULL            | NULL          | SW            | SW              | Marker   |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    2 |    3 | DEUQue_BAZReurs | Ten rows      | DEU146        | AVE 2950        | Project  |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    2 |    4 | NULL            | Ten rows      | BGR001        | A7BM0001        | Standard |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    2 |    5 | DEUQue_BAZReurs | Ten rows      | DEU146        | AVE 2924        | Project  |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    3 |    1 | DEUQue_BAZReurs | Ten rows      | DEU146        | AVE 4659        | Project  |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    3 |    2 | NULL            | Ten rows      | CPVO          | 19960125        | Standard |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    3 |    3 | NULL            | NULL          | SW            | SW              | Marker   |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    3 |    4 | DEUQue_BAZReurs | Ten rows      | DEU146        | AVE 2967        | Project  |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    3 |    5 | DEUQue_BAZReurs | Ten rows      | DEU146        | AVE 544         | Project  |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    4 |    1 | DEUQue_BAZReurs | Ten rows      | RUS001        | 200111466       | Project  |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    4 |    2 | DEUQue_BAZReurs | Ten rows      | DEU146        | AVE 2067        | Project  |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    4 |    3 | DEUQue_BAZReurs | Ten rows      | DEU146        | AVE 4794        | Project  |
| 2007DEUQue_BAZ/AVEQInc10 | 1     |    4 |    4 | NULL            | NULL          | SW            | SW              | Marker   |
+--------------------------+-------+------+------+-----------------+---------------+---------------+-----------------+----------+


60 rows in set (0.00 sec)


Was ich hinbekomme ist eine Klassenhirarchie in Java zu erstellen die dann aber auf mehrere Tabellen mappt.

Ist das überhaupt möglich so etwas auf genau eine Tabelle zu bekommen? Und wenn ja, wie? Diese Klassen hätt ich gern:
Code:
@Entity
public class Experiment ..{
   ....
   List<Fieldplan> expFieldplan
   ....
}

public class Fieldplan {
    List<Plot> Lane;
}

public class Plot {
   all attributes of one plot
}



Wie müssen die annotiert werden, damit die Klassen auf die genannte Tabelle mappen?
Wenn mir jemand ein paar Hinweise geben könnte, wo so etwas schon dokumentiert ist, wäre das sehr nett.
Christians Bch hab ich komplett gelesen und ich kenne auch den Hibernate Wiki und die Faqs. Jedoch habe ich nichts finden können, was mir weiterhilft.
Ciao,
Carsten


Top
 Profile  
 
 Post subject:
PostPosted: Sun May 13, 2007 12:14 pm 
Expert
Expert

Joined: Tue Nov 23, 2004 7:00 pm
Posts: 570
Location: mostly Frankfurt Germany
Ohne Id geht das nicht. Hibernate muss irgendwie ein Objekt identifizieren. Evt. kannst Du alle Spalten zur Id machen. Nicht schön, aber geht.

Die Frage ist, ob Du Daten lesen oder auch schreiben möchtest.

Variante 1)
Drei Views erstellen, die Dir die eine Tabelle etwas zerlegen und normale 1:n Beziehungen erlauben

Variante 2)
Ein passendes Mapping bauen.
Hilfreich sind für Dich vermutlich Filter
"where" in XML Mapping.
where=stocksite is null
könnte zum Beispiel dein erstes Objekt identifizieren.

Ansonsten hilft wahrscheinlich property-ref.

Weitere Hinweise kriegst Du vielleicht, wenn Du die Zuordnung genauer erklärst.

_________________
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: Mon May 14, 2007 5:24 am 
Newbie

Joined: Tue Jun 28, 2005 10:20 am
Posts: 15
Hallo,
Danke für die Antwort. Es handelt sich wie gesagt um eine legacy Tabelle. Views fallen daher leider aus.
Eine Id hab ich jedoch definieren dürfen, bestehend aus:
ExperimentId,Lane,Plot

Haben möchte ich dies:

Code:
List<Line> plotlist;

Wobei Line folgendermassen aussieht:

Code:
public class Line {

private int lineIndex;
private List<Plot> lane;

public Line(){} [...]

Und Plot ist
Code:
public class Plot implements java.io.Serializable {
   private String experimentId;
   private int lane;
   private short plot;
//und alle anderen Attribute aus der Tabelle
}

Diese Struktur bastel ich mir derzeit zu Fuss zusammen, indem ich die flache Tabelle einlese und in die Struktur umsetze.

Für die äussere Tabelle hab ich schon den Key. das ist die ExperimentId,
der ListIndex ist Lane.
Für die innere Tabelle wäre der Key: ( ExperimentId,Lane)
und der listIndex ist dann Plot

Doch wie setz ich das korrekt um. Alle Versuche liefen bisher ins Leere. Wahrscheinlich seh ich mal wieder den Baum vor lauter Wald nicht:-(
Und dann hätt ich das ganze auch gern per Annotation.
Wäre sehr nett, wenn mir da jemand die richtige Richtung wiesen würde. Auch eine Aussage das es mit dieser Tabelle nicht möglich ist eine strukturierte Liste aufzubauen, würde helfen. Doch besser wäre, wenn ich eine Ahnung bekommen könnte, wie das ganze zu realisieren ist.
Mit property-ref hab ich allerdings auch noch nicht gearbeitet.
Ciao,
Carsten


Top
 Profile  
 
 Post subject:
PostPosted: Mon May 14, 2007 6:56 am 
Expert
Expert

Joined: Tue Nov 23, 2004 7:00 pm
Posts: 570
Location: mostly Frankfurt Germany
Du kannst mit <subselect>select distinct exid, lane from test
</subselect> und XML einen Armeleute-View erstellen.

Evt. reicht für Dein erstes Objekt auch ein where Filter.

Du musst nicht nur den Primary key für die TAbelle, sondern für die verschiedenen Sichten definieren.

Bsp.:
Objekt 1: Id ist experimentId
select distinct exid from test
Objekt 2: Id ist experimentId und lane
select distinct exid, lane from test

und so weiter.
Wenn Du die Objekte sauber extrahiert hast, kannst Du anfangen die Beziehung zu erstellen.

Ein subselect ist meines Wissens mit Annotation nicht möglich.

_________________
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: Mon May 14, 2007 9:01 am 
Newbie

Joined: Tue Jun 28, 2005 10:20 am
Posts: 15
Hallo,
danke für die schnelle Antwort. Aber irgendwie steh ich noch immer auf dem Schlauch:-(
Kann mir vielleicht mal jemand, unabhängig vom konkreten Problem, zeigen, wie eine Liste von Listen zu mappen ist. Das könnte weiterhelfen.
So hab ich das für eine einfache Liste gelöst. Allerdings hab ich da dann auch 2 Objekte dafür.
Das folgende Mapping ist ein Teil vom Mapping der Klasse PCRprogram
Code:
   <list name="pcrProgramlineList" lazy="false" cascade="save-update">
      <key column="PCRPROGRAMID" foreign-key="FK_PCRPROGRAMCODELINE_PCRPROGRAM"/>
      <list-index column="listorder"/>
      <one-to-many entity-name="de.bafz.lims.model.PCRProgramCodeline"/>
    </list>

Wie würde dieser Liste jetzt eine weitere Dimension hinzugefügt werden.

Wenn ich das erst mal verstanden habe, kommt dann wieder das ursprüngliche Problem zum tragen, wie das ganze mit nur einer Tabelle funktiuoniert.
Danke,
Carsten


Top
 Profile  
 
 Post subject:
PostPosted: Mon May 14, 2007 9:29 am 
Expert
Expert

Joined: Tue Nov 23, 2004 7:00 pm
Posts: 570
Location: mostly Frankfurt Germany
Das Mapping sieht richtig aus. Lass doch einfach in einer Testdatenbank Hibernate mit hbm2ddl.auto die Tabellen erzeugen.
dann kannst Du damit experimentieren.

_________________
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: Mon May 14, 2007 10:00 am 
Newbie

Joined: Tue Jun 28, 2005 10:20 am
Posts: 15
Ja, das Mapping ist richtig. Aber das ist ja auch nur eine einfache Liste. Ich hatte das nur als Beispiel genommen. Wie erweitere ich diese Liste um an eine Liste von Listen zu kommen? Genau das fehlt mir um experimentieren zu können.
Wie sieht ein funktionierendes Mapping (inklusive der Javaobjekte) von Listen von Listen aus?

Ciao,
Carsten


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 7 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.