JBoss/Hibernate: Abfrage dauert lang + hohe CPU?

T

tuxedo

Gast
Hallo,

hab ein kleines Problem mit unserem Server in Verbindung mit einer JPA Query. Ich versuchs mal möglichst klar darzustellen:

Ich habe folgende Entity:

Java:
@Entity
@Table(name = "cms_medc_files")
public class DBFileMetaData
    implements Serializable
{
    
    /**
     * object is a DIRECTORY
     */
    public static final int TYPE_DIR = 0;
    
    /**
     * object is a FILE
     */
    public static final int TYPE_FILE = 1;
    

    private static final long serialVersionUID = 2L;
    private long mId;
    private String mName;
    private String mPath;
    private int mType;
    private int mSize;
    private Date lastModified;

    /**
     * Returns the db internal ID of this entry.
     * Normally this isn't used from "outside".
     * 
     * @return the internal id
     */
    @Id
    @GeneratedValue
    @Column(name="id")
    public long getId ()
    {
        return mId;
    }
    
    /**
     * Sets the internal ID of this entry.
     * Normally this isn't used from "outside".
     * 
     * @param anId
     */
    public void setId (long anId)
    {
        mId = anId;
    }
    
    /**
     * Returns the name of this entry.<br>
     * In case of type {@link DBFileMetaData#TYPE_FILE}, this will return the directory name without any '/' or parent directory names<br>
     * In case of type {@link DBFileMetaData#TYPE_FILE}, this will return the filename, without any directory names
     * 
     * @return the entry's name
     */
    @Column(name="name")
    public String getName ()
    {
        return mName.toLowerCase();
    }
    
    /**
     * Sets the name of this entry.
     * 
     * In case of type {@link DBFileMetaData#TYPE_DIR}, the directory's name without any '/' or parent directory names must be used<br>
     * In case of type {@link DBFileMetaData#TYPE_FILE}, the filename, without any directory names must be used
     * 
     * @param anName entry's name
     */
    public void setName (String anName)
    {
        mName = anName.toLowerCase();
    }
    
    /**
     * Returns the path in which the entry is located. 
     * 
     * @return the entry's parent path
     */
    @Column(name="path")
    public String getPath ()
    {
        return mPath.toLowerCase();
    }
    
    /**
     * Sets the parent path in which the entry is located.
     * 
     * @param anPath the parent path of this' entry
     * 
     */
    public void setPath (String anPath)
    {
        mPath = anPath.toLowerCase();
    }
    
    /**
     * Returns the entry's size. In case of type {@link DBFileMetaData#TYPE_DIR}, the size is always 0
     * 
     * @return the entry's size measured in bytes
     */
    @Column(name="size")
    public int getSize ()
    {
        return mSize;
    }
    
    /**
     * Sets the size of this entry. In case of {@link DBFileMetaData#TYPE_DIR} this must be 0.
     * 
     * @param anSize
     */
    public void setSize (int anSize)
    {
        mSize = anSize;
    }

    /**
     * Returns the "last modified" date. As no "edit" operations are allowed on {@link IFileSystem}, this only reflects the "create date"
     * @return last modified date
     */
    @Column(name="last_modified")
    public Date getLastModified ()
    {
        return lastModified;
    }

    /**
     * Sets the timestamp at which the entry was created. 
     * 
     * @param anDate the date of creation
     */
    public void setLastModified (Date anDate)
    {
        lastModified = anDate;
    }

    /**
     * Returns the type of this db entry.
     *  
     * @see DBFileMetaData#TYPE_DIR
     * @see DBFileMetaData#TYPE_FILE
     * @return the file entry's type
     */
    @Column(name="type")
    public int getType ()
    {
        return mType;
    }

    /**
     * Sets the type of this entry.
     * 
     * @see DBFileMetaData#TYPE_DIR
     * @see DBFileMetaData#TYPE_FILE
     * @param anType the type
     */
    public void setType (int anType)
    {
        mType = anType;
    } 
    
    /**
     * 
     * Is the current entry a folder?
     * 
     * @return true, if this object describes a folder, false if not
     */
    @Transient
    public boolean isDirectory(){
        return (mType==TYPE_DIR ? true : false);
    }
    
    /**
     * @see java.lang.Object#toString()
     */
    @Override
    @Transient
    public String toString ()
    {
        StringBuffer sb = new StringBuffer();
        
        sb.append("[id=");
        sb.append(mId);
        sb.append("|name=");
        sb.append(mName);
        sb.append("|path=");
        sb.append(mPath);
        sb.append("|size=");
        sb.append(mSize);
        sb.append("|type=");
        sb.append(mType);
        sb.append("]");
        
        return sb.toString();
    }
    
}

Und ich habe eine weitere Entity, die von der ersten erbt:

Java:
@Entity
@Table(name = "cms_medc_files")
public class DBFile extends DBFileMetaData
    implements Serializable
{

    private static final long serialVersionUID = 2L;
    private byte[] mData;
    
    /**
     * Returns the file entry's data
     * 
     * @return the complete data of this file in a byte[] 
     */
    @Column(name="data")
    public byte[] getData ()
    {
        return mData;
    }
    
    /**
     * Sets the data that belongs to the current file.
     * 
     * @param anData the complete file data as an byte[]
     */
    public void setData (byte[] anData)
    {
        mData = anData;
    }
    
    
}

Und eine Abfragelogik die wie folgt ausschaut:

Java:
public List<DBFileMetaData> list (String aPath)
    {
        long start = System.currentTimeMillis();
        aPath = aPath.toLowerCase();
        
        mLogger.debug("begin. aPath=",aPath);
        Query query = mEntityManager.createQuery("FROM DBFileMetaData WHERE path=:PATH ORDER BY NAME");
        query.setParameter("PATH", aPath);
        List<DBFileMetaData> resultList = query.getResultList();
        if (mLogger.isDebugEnabled()) {
            for (DBFileMetaData fileMetaData : resultList)
            {
                mLogger.debug("entry="+fileMetaData);
            }
        }

        mLogger.debug("end. resultList.length=",resultList.size()," duration: ",(System.currentTimeMillis()-start)," ms");
        return resultList;
    }

Hintergrund der Sache:

Über die Datenbank ist ein kleines aber feines Dateisystem realisiert. Ich bin mir bewusst, dass das nicht der optimale Weg ist eine Datei auf dem Server abzulegen. Aber in diesem Fall gings nicht anders ohne einen extremen Aufwand zu bewältigen.

In der Datenbank (PostgreSQL 8.3) liegen rund 600 Einträge. Manche davon sind "Verzeichnisse" und haben somit keine Binärdaten, andere wiederum sind Dateien und haben Binärdaten mit bis zu 10MB Größe.

Die oben gezeigte Methode soll den Inhalt eines Verzeichnisses auflisten OHNE die Binärdaten mit abzufragen.

In einem Verzeichnis das 83 Dateien mit einer Gesamtgröße von etwa 100MB hat dauert die Abfrage auf unserem System um die 10sec und die CPU schnellt auf 80-100%
Mache ich die Abfrage auf ein Verzeichnis das weniger Datein hat (und somit auch weniger Gesamt-MB), dann geht die Abfrage rasend schnell und die CPU ist davon wenig beeindruckt.

Kann mir jemand sagen - mal abgesehen davon dass man Dateien nicht in einer DB speichern sollte - was hier falsch läuft? Hab ich die Entity falsch aufgebaut? Ist die Abfrage schlecht gewählt?

Meine Vermuting ist dass es mit der Vererbung der Entity Probleme gibt und eine Abfrage auf "nur die Meta-Daten" auch noch die Binärdaten irgendwie mit einbezieht ...

Gruß
Alex
 
M

maki

Gast
Das Kriterium ist ja nur der Path, oder?
String sind da nicht sehr performant, vielleicht hilft eine indizierung.
 
T

tuxedo

Gast
Ja, das Kriterium ist allein der Pfad.

Wie mach ich das mit der Indizierung? *jpa unwissend bin*
 
S

SlaterB

Gast
das erklärt ja nicht wieso es von 82 auf 83 Dateien auf einmal unendlich langsamer wird, zumal 83 Strings nie irgendwelche Zeit erfordern

eine DB ist eine BlackBox, lohnt es sich über deren Verhalten nachzudenken wenn es über die normalen Probleme mit Constraints, Indexen, Encoding hinausgeht?
vielleicht in den sauren Apfel beißen und getrennte Tabellen verwenden
 

fastjack

Top Contributor
Kannst Du Dir nicht das SQL-Query ausgeben lassen? Oder mal in dem PG-Log nachsehen. Nur um sicherzugehen, das er auch nur die relevanten Felder anwählt...
 
T

tuxedo

Gast
Kannst Du Dir nicht das SQL-Query ausgeben lassen? Oder mal in dem PG-Log nachsehen. Nur um sicherzugehen, das er auch nur die relevanten Felder anwählt...

Wenn ich wüsste wie?! Im PG_log ... Jo, gute Idee, werd' ich mal tun.

Hab mittlerweile nen weiteren test gemacht. Hab ein Verzeichnis auflisten lassen, dessen Inhalt ausschließlich weitere Verzeichnisse sind. Das geht mit 100 solcher unterverzeichnisse rasend schnell. Es muss also irgendwie an den Binärdaten liegen die im ersten Test eigentlich ausgeklammert werden sollten...
 
S

SlaterB

Gast
> Du meinst also ich sollte die Binärdaten von den Metadaten trennen und eine eigene Tabelle spendieren?

eben, wenn dort 83 simple DB-Einträge genauso Probleme machen, dann ist es was mit Index oder sonst wie komischen,
wobei schwer vorzustellen

im Moment siehts aber schwer nach den 100 MB als Grund aus, wie auch immer die DB oder Hibernate da ein Problem reinbringt,
sicher sollte das besser geklärt werden, die Trennung ist nur ein Notfallplan
 
T

tuxedo

Gast
Hab mit mit PGAdmin in die Abfrage reingeschaut...
Da kommt folgendes an:

select dbfilemeta0_.id as id25_, dbfilemeta0_.name as name25_, dbfilemeta0_.type as type25_, dbfilemeta0_.size as size25_, dbfilemeta0_.path as path25_, dbfilemeta0_.last_modified as last7_25_, dbfilemeta0_.data as data25_, dbfilemeta0_.DTYPE as DTYP...

Wie man sieht frägt er auch noch die Daten mit ab --> Unschön.

Ist es denn so unüblich dass man eine bestehende Entity nochmal spezialisiert?
 
T

tuxedo

Gast
Hi nochmal,

hab etwas gegoogelt und das hier gefunden:

EJB 3.0 (Teil IV): Endlich Vererben!

Darin ist folgender Aufbau beschrieben: "Eine Tabelle pro konkreter Klasse (TABLE_PER_CLASS)"

Prima. Gleich ausprobiert. Fazit:
Ich hab nun zwei Tabellen. Eine die alle Spalten der MetaData Entity enthält, und eine zweite die alle Spalten der MetaData Entity PLUS die Spaltend er DBFile Entity enthält.

Starte ich nun die gleiche Anfrage wie oben dargestellt dauert's wieder lange. Grund: Hibernate format schon wieder ein SQL Statement das die Daten mit abfrägt ... Tollw Wurst. Wozu dann der Aufwand?

Letzte Möglichkeit die ich noch sehe: Zwei komplett getrennte Entities erstellen und per Code selbst sicherstellen dass beides passend synchron ist. Aber das kann's doch im modernen JPA Zeitalter nicht sein, oder?

- Alex
 
S

SlaterB

Gast
falls noch unklar: ich sprach wirklich von zwei getrennten Tabellen in der DB, allenfalls mit Fremdschlüsselbeziehung
 
T

tuxedo

Gast
Jo, das ist angekommen. Und ich hab das, wie im letzten Post beschrieben auch ausprobiert. Es sind nun zwei Datenbank-Tabellen. Geht trotzdem nicht.

Hab dann noch den dritten Punkt in besagter URL ausprobiert: "Joined Subclass Strategy (JOINED)"

Jetzt hab ich zwei Tabellen. In der ersten nur noch die Meta-Daten, und in der zweiten über eine ID-Spalte mit der ersten Tabelle verlinkt, nur noch die Binärdaten.

Fazit: Gleicher Effekt. Hibernate frägt auch hier alles ab, statt nur die Meta-Daten. Mir scheint als ob Hibernate da ne Macke hat sobald man eine Entity vererbt...



- Alex
 
T

tuxedo

Gast
Keine Ahnung. Kenn mich mit JPA nicht so aus. Oben hast du die ganze config der Entities. Mehr hab ich da nicht.

Was ich mich aber Frage:

Wenn ich explizit und nur die MetaDaten anfrage und als Ergebnis auch nut MetaDaten-Objekte bekomme, die gar keine Binärdaten enthalten, WIESO macht Hibernate dann eine Abfrage inkl. der Binärdaten? Ich denke hier dürfte Lazy oder Nicht-Lazyloading keine Rolle spielen, oder? Weil über die Metadaten-Objekte komm ich ja eh nicht an die Binärdaten. Die müsste ich ja extra abfragen.

- Alex
 
M

maki

Gast
Sowolh die DBFile als auch DBFileMetaData landen doch inder selben Tabelle.
Wüde mir da das generierte SQL anzeigen lassen.
 
T

tuxedo

Gast
@maki

Du hast scheinbar nicht alles gelesen. Hab gemäß einer verlinkten Anleitung im Netz die Annotations geändert. Und damit hab ich jetzt zwei Tabellen. Siehe http://www.java-forum.org/data-tier...-abfrage-dauert-lang-hohe-cpu.html#post644374

Aber auch da ist das Problem wie beschrieben noch vorhanden.

War jetzt soweit, dass ich ein "native query" drauf loslasse:

Code:
Query query = mEntityManager.createNativeQuery("SELECT * FROM cms_medc_metadata WHERE path='"+aPath+"' ORDER BY name", DBFileMetaData.class);

Haken: Ich kann das die result-list nicht casten nach DBFileMetaData... Ich krieg eine ClassCastException. Ich hab dann mal wieder gegoogelt:

Ergebnis:

http://stackoverflow.com/questions/2140992/jpa-native-query-for-entity-with-inheritance hat gesagt.:
16.1.6. Handling inheritance

Native SQL queries which query for entities that are mapped as part of an inheritance must include all properties for the baseclass and all its subclasses.

SUPER. Sobald ich also mit JPA Vererbung verwende, komm ich, egal wie ich's drehe und wende, nicht drum rum alle sub-entities auch mit zu laden. Auch wenn ich die gar nicht benötige. Na das nenn ich mal eine frickel-lösung. Wozu mach ich mit denn die Mühe eine Entity zu spezialisieren wenn ich, auch wenn ich mich nur für die Root-Entity interessiere, alles geladen bekomme?

Siehe dazu auch:
http://www.ordix.de/ORDIXNews/3_2007/Java_J2EE_JEE/ejb_teilIV.html hat gesagt.:
Polymorphe Abfragen

Mit der Java Persistence API sind nun polymorphe Abfragen möglich. In JP-QL kann man nach der Basisklasse fragen und erhält als Ergebnismenge Entitäten von allen Subklassen.
...

Also bleibt mir in dem Fall nix anderes übrig als tatsächlich zwei getrennte (und somit nicht vererbte) Entitäten zu benutzen und selbst sicherzustellen, dass die synchron zueinander sind.

Oder hat jemand ne bessere Idee?

- Alex
 
T

tuxedo

Gast
Macht es denn einen Unterschied von wo ich das SQL Statement ausführe? Kann ich mir nicht vorstellen, solange es ein und dasselbe Statement ist. Und DASS es am Query liegt hab ich ja schon rausgefunden.

- Alex
 
T

tuxedo

Gast
Ich denke ich hab eine Lösung gefunden:

Vererbung weglassen und zwei Entities auf ein und dieselbe Tabelle ansetzen:

Java:
@Entity
@Table(name = "cms_medc_files")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class DBFile
    implements Serializable
{
    
    /**
     * object is a DIRECTORY
     */
    public static final int TYPE_DIR = 0;
    
    /**
     * object is a FILE
     */
    public static final int TYPE_FILE = 1;
    
    /**
     * 
     */
    private static final long serialVersionUID = 2L;
    private long mId;
    private String mName;
    private String mPath;
    private int mType;
    private int mSize;
    private Date lastModified;
    private byte[] mData;

....

und

Java:
@Entity
@Table(name = "cms_medc_files")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class DBFileMetaData
    implements Serializable
{
    
    /**
     * object is a DIRECTORY
     */
    public static final int TYPE_DIR = 0;
    
    /**
     * object is a FILE
     */
    public static final int TYPE_FILE = 1;
    
    /**
     * 
     */
    private static final long serialVersionUID = 2L;
    private long mId;
    private String mName;
    private String mPath;
    private int mType;
    private int mSize;
    private Date lastModified;

....

Die erste Entity benutze ich um Files zu schreiben und zu lesen. Der EntityManager macht also sowohl ein Query als auch ein Persist mit dieser Entity.

Die zweite Entity benutze ich nur "lesend" (also nur query, kein persist). Diese hat die gleichen Felder, bis auf das Binärdaten-Feld. Das fehlt.

Das lesen eines großen Verzeichnisses geht nun rasend schnell, egal wieviel MiB Daten drinliegen.

Was ich jetzt nur noch nicht weiß:
Woher weioß Hibernate beim ersten Start (wenn noch keine Tabellen da sind), nach welchem Schema, bzw. nach welcher Entity er die DB aufbauen muss? Immerhin gibt es jetzt zwei Entities die die gleiche Tabelle beschreiben, eine Entity jedoch ein Feld mehr hat.
Ist das System dann so schlau und nimmt die Summe aller Felder aller Entities für eine Tabelle zusammen? Oder hab ich jetzt irgendwie "Glück" dass er die DBFile Entity zum erstellen der Tabnelle hergenommen hat?

- Alex
 
T

tuxedo

Gast
Also Hibernate scheint das intern schon auf die Reihe zu kriegen und legt die Tabellen gemäß DBFile Klasse an.

Bei Abfragen ist das recht unkompliziert. Frage ich mittels MetaDaten Klasse ab, lässt er die Binärdaten einfach weg. Super.

Selbst beim löschen kann ich die MetaDaten Entity benutzen. Er löscht die komplette Zeile in der DB inkl. Binärfeld.

Ist also eine für mich optimale Lösung. --> *erledigt*
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Y Jboss seam-hibernate-jpa Data Tier 5
I JBoss H2 Database Data Tier 0
vladimir JPA JBoss 7 und JPA/Hibernet mit MySQL Data Tier 4
S JPA 2, JBoss 7 und persistence.xml Data Tier 2
T Hibernate/Spring JPA: eigene ID generieren Data Tier 5
Avalon @ManyToOne Hibernate oder JPA? Data Tier 5
D Hibernate Hibernate mit MariaDB Data Tier 1
ToBJo Hibernate Glassfish deploy mit Hibernate schlägt fehl Data Tier 1
C JPA Hibernate Map<String,String> richtig mappen Data Tier 2
S JPA Hibernate Search & EclipseLink (oder OpenJPA) Data Tier 0
R JPA Probleme mit Wechsel von EclipseLink auf Hibernate Data Tier 4
ARadauer Hibernate Entität readonly laden... Data Tier 1
G Hibernate SQL in Hibernate: Keine Parameter mit Index? Data Tier 2
P Wildfly + Hibernate + SQL Server Data Tier 0
E JPA Hibernate Query mit Timestamp hat seltsames Verhalten Data Tier 1
M Eclipse 4 RCP Hibernate Problem Data Tier 3
C Hibernate ProgressBar updaten mit Daten aus Hibernate Data Tier 4
B Hibernate und MySQL testen Data Tier 8
I Hibernate HQL: generiertes SQL ausgeben Data Tier 1
R mapping-file für hibernate zum Überschreiben der Annotationen Data Tier 7
R Hibernate Hibernate und Logback Data Tier 2
R Hibernate möchte Schema zwei mal undeployen Data Tier 2
F Hibernate Hibernate / JPA Data Tier 4
E Hibernate: Session vs EntityManager Data Tier 3
C Hibernate Hibernate Code Generation Data Tier 3
S Hibernate Mehrfachverbindung mit Hibernate Data Tier 3
M Hibernate Einstiegsfrage Data Tier 5
M Exception in thread "main" org.hibernate.MappingException: java.lang.ClassNotFoundException: Message Data Tier 4
S Hibernate Einstieg in Hibernate 3.2 sinnvoll? Data Tier 8
P JPA Eigene Vererbungsstrategie mit JPA / Hibernate Data Tier 2
J Hibernate Problem bei Master-Detail-Tabellen Data Tier 5
RaoulDuke Hibernate Map<String,String> mit Annotations mappen Data Tier 2
M Hibernate Hibernate with GWT Data Tier 4
C Hibernate JPA mysql db erstellen Data Tier 4
M Hibernate Hibernate liest Daten zu oft aus! Data Tier 16
pg1337 Hibernate Fragen Data Tier 11
D Probleme bei Left Joins mit Hibernate createCriterias() Data Tier 2
D Hibernate probleme mit Verlinkungstabelle Data Tier 4
2 Hibernate Annotations Data Tier 7
G Hibernate select update no wait Data Tier 8
Z Hibernate: Many-To-Many nur eine bestimmte Spalte Data Tier 3
K Hibernate - Envers - Erzeugung der SQL Skripte Data Tier 4
G Hibernate 1:n Beziehung mit Vererbung Data Tier 5
D Hibernate-Criteria-API (Projections und MAX-Funktion) Data Tier 6
L Hibernate: failed to lazily initialize a collection of role Data Tier 3
S Hibernate hibernate.cfg.xml Data Tier 14
D JPA vs Hibernate.cfg und Entitymanager Data Tier 6
H Hibernate - Mapping für Enumeration Data Tier 1
R Hibernate Criteria Abfrageproblem Data Tier 2
A Hibernate und jdbc zusammen Data Tier 4
D Mit Hibernate aus JUnit ein DB-Schema erzeugen Data Tier 6
S [Hibernate] No Persistence provider for EntityManager Data Tier 5
B Problem mit org.hibernate.LazyInitializationException Data Tier 11
G Hibernate HQL und Interface Data Tier 4
G JSF Hibernate no session or session was closed Data Tier 12
T JPA2/Hibernate: Many-to-Many-Relation wird u.a. beim löschen nicht aktualisiert Data Tier 14
S (Hibernate) Mapping einer Datenbanktabelle mit mehreren Fremdschlüssel Data Tier 7
X [Hibernate] Zusammengesetzte Entities möglich? Data Tier 7
N Hibernate Fake? Data Tier 2
S Problem beim Insert mit Hibernate Data Tier 9
V Hibernate Projection Data Tier 2
T org.hibernate.impl.SessionFactoryImpl Memory Leak Data Tier 10
G Hibernate Composite key Data Tier 11
X [Hibernate] Connection Pool - MinSize ? Data Tier 2
R Hibernate Criteria OR Data Tier 2
T hibernate/jpa abgefragte Listen immer mit Null-Werten gefüllt Data Tier 8
X [Hibernate] Anderen Connection Pool - Vorschläge? Data Tier 3
ARadauer Hibernate DDL Loggen Data Tier 6
G Hibernate abfrage Collection Data Tier 3
X [Hibernate] ReverseEngineering - Eigene Strategy verwenden? Data Tier 3
R Hibernate Criteria .group größer als Data Tier 5
R Hibernate daten laden Data Tier 7
H [Hibernate]1:1 Beziehung Data Tier 8
H [Hibernate]No CurrentSessionContext configured! Data Tier 6
X [Hibernate] Lässt sich die Dauer eines SELECTs loggen? Data Tier 4
R Hibernate n:n Relationtabelle mit Date Data Tier 3
H [Hibernate] Unknown Entity Data Tier 3
H [Hibernate] Configuration Data Tier 3
C [Hibernate] Generierung von hbm.xml to Java Data Tier 4
lumo Eclipse & JPA & Hibernate & Derby Data Tier 5
J Zufallsauswahl aus ResultList bei JPA(Hibernate) / Performance Data Tier 3
M Hibernate: Datum 0001-01-01 erzeugt null-Datum Data Tier 4
G Datenbankzugriff mit Hibernate Data Tier 7
Y Hibernate - Angabe des Schemas Data Tier 6
LadyMilka (Hibernate) in Criteria implizierter Join durch Subquery's Data Tier 8
M Hibernate Mehr als 1 Object speichern? Data Tier 18
M Unerklärliche Hibernate Exception Data Tier 20
LadyMilka (Hibernate) subquery in FROM-Clause Data Tier 9
haemi Viele DTOs in hibernate IdentityMap Data Tier 3
LadyMilka (hibernate) UNION dem Dialekt hinzufügen Data Tier 3
M Hibernate + Oracle 10g XE Data Tier 3
lumo Hibernate - entity class not found Data Tier 5
P SQL PRoblem Hibernate? Data Tier 8
J Vererbung mit JPA / Hibernate - pro/contra Data Tier 3
7 Hibernate-Abfrage (SubSelect im FROM) Data Tier 2
G Hibernate: many-to-one - Verwaiste Datensätze löschen Data Tier 2
G Layer für Datenbankzugriff Hibernate Data Tier 5
G Hibernate Zwischentabelle Data Tier 2
Java.getSkill() Hibernate und Spalte vom Typ xml Data Tier 6
G Hibernate 0...1 : 1 Beziehung Data Tier 6

Ähnliche Java Themen

Neue Themen


Oben