Tenho uma solução que usei durante muito tempo.
Persistência através de herança.
Olhando o AR do Rails aqui: http://ar.rubyonrails.com/, percebo que ele faz o mesmo. :? :? :? :? :?
O problema desse approach é:
- Precisa de herança, logo não é totalmente transparente. (Isso raramente é um problema!)
- Também só serve para CRUD
É aquilo que eu falei: Se o cara quer só CRUD e vai fazer o resto com JDBC (sem mudar de idéia depois :D ), acho que hibernate é desnecessário, e até overkill.
Por isso que eu nunca usei Hibernate, pois só queo o CRUD.
Veja como fica bonito um objeto persistente:
package com.sellmate.beans.impl;
import java.util.*;
import com.sellmate.beans.*;
import com.smartjava.web.persistence.*;
import com.smartjava.web.persistence.db.*;
import com.smartjava.web.db.*;
public class DBInviteImpl extends DBPersistent implements Invite {
private IntField id = new AutoIncrementField(this, "id", true);
private StringField email = new StringField(this, "email");
private IntField status = new IntField(this, "status");
private BooleanField deleted = new BooleanField(this, "deleted");
private DateTimeField senddate = new DateTimeField(this, "senddate");
private IntField owner_id = new IntField(this, "owner_id");
private IntField locale_id = new IntField(this, "locale_id");
public static Invite getInstance() {
return new DBInviteImpl();
}
protected DBInviteImpl() { }
public ConnectionHandler getConnectionHandler() {
return DefaultConnectionHandler.getInstance("sellmate");
}
public String getTableName() { return "invites"; }
public void setId(int id) { this.id.setValue(id); }
public int getId() { return id.getValue(); }
public void setEmail(String email) { this.email.setValue(email); }
public String getEmail() { return email.getValue(); }
public void setStatus(int status) { this.status.setValue(status); }
public int getStatus() { return status.getValue(); }
public boolean isWaiting() { return getStatus() == Invite.WAIT_STATUS; }
public boolean isAccepted() { return getStatus() == Invite.ACCEPTED_STATUS; }
public boolean isOtherUser() { return getStatus() == Invite.OTHERUSER_STATUS; }
public void setDeleted(boolean deleted) { this.deleted.setValue(deleted); }
public boolean isDeleted() { return deleted.getValue(); }
public void setSendDate(Date senddate) { this.senddate.setValue(senddate); }
public Date getSendDate() { return senddate.getValue(); }
public void setOwnerId(int profile_id) { this.owner_id.setValue(profile_id); }
public int getOwnerId() { return owner_id.getValue(); }
public void setLocaleId(int locale_id) { this.locale_id.setValue(locale_id); }
public int getLocaleId() { return locale_id.getValue(); }
}