Java Nutzung Hibernate DDL Auto (hibernate.hbm2ddl.auto)

GTR

Lt. Commander
Registriert
Feb. 2006
Beiträge
1.304
Hi,

Ich würde gerne die Möglichkeit nutzen das DDL automatisch ausgeführt wird. Das funktioniert auch problemlos allerdings ist die Reihenfolge der Columns nicht so wie sie definiert sind (H2 DB):

TestCode
Code:
@Entity
@Access(AccessType.FIELD)
@Table(name = "KUNDE", schema = "PUBLIC", catalog = "TESTDB")
public class KundeEntity {
    @Id
    @GeneratedValue
    private int userid;
    private String name;
    @ManyToOne
    @JoinColumn(referencedColumnName = "KID", nullable = true)
    private KontoEntity kontoByKid;
    @Column(columnDefinition = "OTHER")
    private Serializable myObject;
    @Column(nullable = true)
    private int newColumn;

Ausführung:
Code:
Hibernate: 
    create table TESTDB.PUBLIC.KUNDE (
        userid integer generated by default as identity,
        myObject OTHER,
        name varchar(255),
        newColumn integer,
        kontoByKid_KID integer,
        primary key (userid)
    )

Hat jemand dazu eine Idee? Weil alphabetisch scheint das ja auch nicht zu sein...
 
Äääähm ... wieso interessiert dich überhaupt die Reihenfolge der Columns? Du greifst schließlich via Feldnamen auf die Columns zu und nicht über den Index.

Also das ist ungefähr genau so sinnvoll, wie wenn die Reihenfolge der Feldnamen in einer JavaKlasse eine großartige Bedeutung hätte.


EDIT:
Ich weiß nicht genau wie Hibernate arbeitet, aber schätzungsweise wird wohl per Reflection auf die Felder der Klasse zugegriffen. Da vorher der Java-Compiler die Klassen versucht zu optimieren kann ich mir gut vorstellen, dass die Feldreihenfolge verändert wird. Oder vielleicht werden sie auch in einer HashMap abgelegt und dann kann eh niemand mehr für die Reihenfolge garantieren.

BTW: http://stackoverflow.com/questions/12433998/hibernate-reversed-column-order-by-hbm2ddl
 
Zuletzt bearbeitet:
Mit welchem Modus erzeugst du die Datenbank?
hbm2ddl.auto
create-drop oder update?

Meist passiert die unterschiedliche Reihenfolge bei dem Modus Update wenn eine neue Column definiert wurde, dann wird die an der letzten Stelle der Tabelle eingefügt. Wenn du update nutzt dann drop mal die Tabelle und probiere es aus.

Aus dem stehgreif ist mir aktuell keine Möglichkeit im Kopf (JPA) wie man die Reihenfolge der Columns in der Database direkt beeinflussen kann.
 
Erstmal danke für die Antworten.

benneque schrieb:
Äääähm ... wieso interessiert dich überhaupt die Reihenfolge der Columns? Du greifst schließlich via Feldnamen auf die Columns zu und nicht über den Index.

Ich muss eine sehr große bestehende Java Enterprise Anwendung überarbeiten. Derzeit sind die Datenbankzugriffe mit JDBC umgesetzt und das auch ziemlich dreckig (schlecht gekapselt und zwar so schlecht das es auch keinen Sinn macht das bestehende zu überarbeiten).
Ich muss nun das gerade biegen und dabei möchte ich ungern die bestehende Struktur der Datenbank verändern da ich nur schrittweise vorgehen kann und die Funktionalität dabei garantieren muss.

hibernate.hbm2ddl.auto hätte mir geholfen die Installation zu vereinfachen - in dem Falle create-drop. Updates würde ich damit nicht machen da es zu unsicher ist und auch von Hibernate selbst nicht empfohlen wird.


So wie ich das sehe wird das Schema so erstellt:
1) Alphabetisch die PK
2) Alphabetisch die anderen Columns (außer PK/FK)
3) Alphabetisch die FK

Die Frage ist nur kann man darauf Einfluss ausüben.
Die Alternativen für DDL wäre natürlich ein eigenes SQL Script (bedeute aber ich muss die DDL redundant warten (script+Entity Models) oder ich rufe manuell für alle 200 Tabellen die create table statements auf (mit native sql queries).
 
Zuletzt bearbeitet:
Zurück
Oben