Composite-Schlüssel (mit Hibernate
Generierung der nächsten SQL-code:
create table users (
user_name varchar(15) not null primary key,
user_pass varchar(15) not null);
create table user_roles(
username varchar(15) not null,
role_name varchar(15) not null,
primary key(usernmae, rolename)
);
Können Sie folgenden code verwenden:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="databaselayer.users.UserDB" table="users">
<id name="username" type="string" column="user_name">
<meta attribute="scope-set">public</meta>
</id>
<property name="password" type="string" column="user_pass" not-null="true"/>
<set name="roles" cascade="save-update" inverse="true">
<key column="user_name"/>
<one-to-many class="databaselayer.users.RoleDB"/>
</set>
</class>
<class name="databaselayer.users.RoleDB" table="user_roles">
<composite-id>
<key-many-to-one name="username" class="databaselayer.users.UserDB" column="user_name"/>
<key-property name="role" type="string" column="role_name"/>
</composite-id>
</class>
</hibernate-mapping>
Sie benötigen, um Ihre Klassen sowie hbm mapping files in den classpath.
Als Nächstes poste ich mein Ant-schema-Ziel:
Hinweis ${basedir}/build/WEB-INF/classes enthält sowohl *.Klasse und *.hbm.xml -Dateien.
<target name="schema" description="Generate DB schema from the O/R mapping files">
<hibernatetool destdir="${basedir}">
<classpath path="${basedir}/build/WEB-INF/classes">
<fileset dir="${basedir}/build/WEB-INF/classes">
<include name="**/*"/>
</fileset>
</classpath>
<configuration configurationfile="${basedir}/hibernate.cfg.xml"/>
<hbm2ddl
drop="true"
create="true"
export="true"
outputfilename="libamo2-ddl.sql"
delimiter=";"
format="true"/>
</hibernatetool>
</target>
Verwandte links aus der Hibernate-Dokumentation
Composite-ID
Komponenten im composite-Id
Es ist nicht klar, was deine Frage hier.
InformationsquelleAutor Sergio del Amo | 2009-04-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick in die hibernate-Dokumentation für das 'composite-id' - element. Das folgende kann zumindest geben Ihnen die Absicht-ersetzen Sie Ihre
id
element mit:Beachten Sie, dass es stark empfohlen, stattdessen machen Sie Ihre ID eine separate Klasse ('component'), die hashCode-und equals korrekt, und das ist Serializable. Sonst werden Sie nur sehr merkwürdige Möglichkeiten, um nachschlagen Ihr Objekt mit
session.get()
odersession.load()
.InformationsquelleAutor Chris Winters
Vielleicht in der Tat etwas wie dies:
Dieser erfolgt die Zuordnung der Rollen zu einer Auflistung der User-Klasse und etwa entspricht das schema, das Sie gab. Es generiert keinen primary key über den Spalten in
user_roles
obwohl.Werden Sie in der Regel erhalten Sie bessere Ergebnisse aus dem Ruhezustand mit mehr normalisierten schemas obwohl. Zum Beispiel, in diesem Fall, Sie nicht haben eine Tabelle für die Rollen selbst; aber was Sie zu sein scheinen, zu beschreiben wäre ziemlich natürlich modelliert werden als Benutzer und die Rolle Klasse, mit einer viele-zu-viele-Beziehung zwischen Ihnen. So etwas wie dieses:
Nun das produzieren eines Schemas mit Tabellen
users
,roles
unduser_roles
und jetztuser_roles
wird über einen Primärschlüssel verfügen über den Benutzernamen und die Rolle name-Spalte. Sie haben nun auch irgendwo zu hängen zusätzliche Informationen über Rollen, wie die Beschreibungen.Auch, den Fehler, den du postest, ist eine ClassNotFoundException das scheint unwahrscheinlich, dass ein problem mit Ihrer Zuordnung als solches.
Können Sie dies mithilfe einer composite-ID, wenn Sie müssen, aber ich würde sagen, es ist eine Last von Schmerzen, die Sie einfach nicht wollen, für etwas das einfach.
InformationsquelleAutor araqnid
Ich füge zu der Antwort von Chris Winter, aber über Fremdschlüssel, um es zu implementieren. Man kann schreiben:
Dies wird den job tun, und auch kümmern der foreign keys, und gibt Ihnen die Flexibilität, definieren Sie selbst, welche Tabellen erstellt werden, in der Datenbank durch Hibernate.
InformationsquelleAutor Jadiel de Armas
Sergio, Blick auf diese composite-Schlüssel-mapping in hibernate tutorial. Vielleicht helfen Ihnen.
InformationsquelleAutor vsingh