ORM: Objekt persistence library für relationale Datenbanken

Deemax

Erfahrenes Mitglied
Hallo,

ich suche ein gutes Tools um Objekte in verschiedenen Datenbank zu speichern.
In Java ist Hibernate ja Stand der Dinge. Für .Net gibt es NHibernate aber ich weiß bisher nicht, wie weit die mit der Entwicklung sind. Gentle.Net hört sich auch nicht schlecht an.

Kennt einer von euch sich damit aus und hat bereits Erfahrungen gesammelt?
 
Gentle.NET ist sehr einfach zu benuzten und verstehen. Mit hilfe von dem MyGeneration werkzeug (siehe http://www.mygenerationsoftware.com) schreibt sich die ganze DAL selbst.

Der wichtigste mangel an Gentle ist die SqlBuilder klasse um eigene, komplekse abfragen (queries) zu erstellen: sie beherscht noch nicht funktionen wie JOIN, HAVING, u.a. Für die meisten bedürfnisse ist sie jedoch ausreichend.

(bitte entschuldige evt. sprachliche fehler - ich bin aus Dänemark :)

Yours,
Morten
 
cosmochaosmaker hat gesagt.:
Die ADODB kann ganau das was Du machem willst.
Such mal im Forum!

MfG cosmo

Adodb ist wirklich etwas anderes als Hibernate.

ADODB gibt dir Datasets und vergleichbares, Hibernate / JDO und Co gibt direkt die betreffenden Objecte, bzw speichert diese Objecte ohne den Umweg über DataSets, RecordSets, Irgendwelche Sets zu gehen.

Beispiel für JDO (was Hibernate sehr ähnlich ist):
Code:
configuration:
<jdo> 
    <package name="de.jorona.viadm.jdobeans">
    	<class name="UserBean"  persistence-capable-superclass="de.jorona.viadm.jdobeans.HumanBean" >
			<field name="messagesIncome" >
				<collection element-type="MessageBean" />
			</field>
			<field name="messagesOutgoing" >
				<collection element-type="MessageBean" />
			</field>
		</class>
 .....

Danach kann mann eine UserBean mit mehreren MessageBeans automatisch in 
einer DB speichern

public static void main(String[] args) {
     PersistenceManager pm = ..... (initialisieren)
     ArrayList messages = Arrays.asList([new MessageBean(), new MessageBean()];
     UserBean userBean = new UserBean();
     userBean.setMessagesIncome(messages);
     userBean.setMessagesOutgoing(messages);
     pm.makePersistence(userBean)
}
Schreibt die UserBean mit all seinen Attributen in die Datenbank, und erstellt selbständig
die Tabellen für die UserBean, die MessageBean und schafft die relationen zwischen den
UserBeans und die betreffende Messages.

Herauslesen aus der Datenbank geht wie folgt

Code:
public static void main(String[] args ) {
       Extent extent = getPersistenceManager().createExtent(UserBean.class);
       for(Userbean bean: extent) {
              // bean ist eine gespeicherte UserBean
              for(MessageBean income: bean.getMessagesIncome()) {
                   //income ist eine MessageBean die in relation zu der userbean stand
                   System.out.println(income.getMessage());
              }
        }
}

Sprich dieser Code liest sämmtliche gespeicherten Objecte aus der Datenbank
und 'bei bedarf' auch deren MessageBeans.

Sprich mann hat einen OOP Zugriff auf relational gespeicherte Daten. Das ist etwas
komplett anderes wie ADODB.
 
Hi,

ich habe mich ein bißchen mit NHibernate beschäftigt und für einfach Speicher/Ladevorgänge durchaus zu gebrauchen. Doch leider bekomme ich es mit Mysql noch nicht zum Laufen (MySql-Connector Probleme).
MyGeneration ist echt gut, es gibt auch ein Nhibernate.Template.
Ein interessante ähnliche Alternative ist noch Neo (http://neo.codehaus.org/) es setzt auf den .Net Datasets auf.
 
Hi!

...war krank.

Bisher war ich immer begeistert vom dem RecordSet. Es war bisher immer nüztlich da es quasi Variablen und Arrays representiert/ersetzt und man auch so damit arbeiten kann.

Aber danke für den Tip! Der Aspekt mit der OOP ich wirklich krass!. :D

MfG cosmo
 
Deemax hat gesagt.:
ich habe mich ein bißchen mit NHibernate beschäftigt und für einfach Speicher/Ladevorgänge durchaus zu gebrauchen. Doch leider bekomme ich es mit Mysql noch nicht zum Laufen (MySql-Connector Probleme).

Gentle funktioniert mit MySQL 4.0 (bestens) und 4.1 (nur z.t. getestet).

Ein markanter Unterschied zwischen Gentle und NHibernate liegt darin dass NH ein direkter Port von der Java-version ist. Dies bedeutet dass .NET nicht voll genutzt wird - statt mit attributes muss metadata in XML definiert werden, und sämtliche "sql constructs" anhand von klassen dargestellt werden (durch die nutzung von Enums wären viel weniger klassen notwendig). Am Ende ist es jedoch geschmackssache was man am besten mag - genug frameworks gibt es ja inzwischen schon :)

Yours,
Morten
 
Zurück