HibernateD and DDBC - ORM and DB abstraction layer for D

Vadim Lopatin coolreader.org at gmail.com
Wed Apr 3 12:01:55 PDT 2013


On Wednesday, 3 April 2013 at 18:36:16 UTC, Jacob Carlborg wrote:
> On 2013-04-03 16:28, Vadim Lopatin wrote:
>> Hello!
>>
>> I've started implemetation of ORM in D, with annotations and 
>> interfaces
>> similar to Hibernate.
>>
>> As DB abstraction layer I wrote DDBC - library with interface 
>> similar to
>> JDBC. Only MySQL driver is implemented. PostgreSQL - in 
>> progress.
>>
>> Project is hosted on SourceForge:
>> https://sourceforge.net/p/hibernated/wiki/HibernateD/ License 
>> is Boost
>>
>> HibernateD collects metadata from classes annotated with 
>> Hibernate-like
>> UDAs.
>>
>> Simple properties of supported: you can annotate fields, D 
>> properties or
>> getter+setter pairs in your class, of types string, byte, 
>> short, int,
>> long, ubyte, ushort, uint, ulong, byte[], ubyte[], DateTime, 
>> Date,
>> TimeOfDay; for non-nullable types to support Null value use 
>> Nullable!
>> template.
>>
>> @Embedded entities supported - you can embed properties from 
>> @Embeddable
>> object to @Entity's table.
>>
>> @OneToOne, @OneToMany, @ManyToOne, @ManyToMany relations are 
>> supported.
>> You can use Lazy! and LazyCollection! to support lazy loading 
>> of
>> aggregates.
>>
>> You can query DB using subset of HQL (Hibernate Query 
>> Language).
>>
>> Look at project wiki and unittests for more info.
>
> Seems to be fairly complex API. How about using some 
> convention-over-configuration.

I believe HibernateD follows convention-over-configuration 
principles.

As per Wikipedia article for convention-over-configuration, "The 
phrase essentially means a developer only needs to specify 
unconventional aspects of the application. For example, if 
there's a class Sale in the model, the corresponding table in the 
database is called “sales” by default. It is only if one deviates 
from this convention, such as calling the table “products_sold”, 
that one needs to write code regarding these names."

At least, for most annotations in HibernateD, you don't need to 
specify parameters like table or columns names, their types, 
nullability, etc.
By default, they are being generated automatically in reasonable 
way.
Say, for "@Entity class CustomerInfo {}" table name 
"customer_info" will be used. For field "@Column int 
streetAddress;", column name "street_address" NOT NULL will be 
used. "@Column Nullable!long flags;" will be NULL in DB.

Unlike Hibernate, in HibernateD there is on option to treat all 
fields/properties/getters as entity properties automatically, 
even if not annotated. In HibernateD, at least @Column annotation 
should present. Not sure it's a big problem.

Where could convention-over-configuration be used in ORM API 
besides annotations?


More information about the Digitalmars-d-announce mailing list