Hibernate já está simples?

Bom aqui nao temos a felicidade de trabalhar com Java5
pois a aplicacao ira rodar em OAS… ( e deu chega de chorar por isso! )

Entao pra fugir da engenharia reversa que algumas vezes deixa-nos na mao, adotamos o XDoclet com as anotacoes do Hibernate!

Ele gera os HBMs certinho, sim nao é um Spring-Annotation + Hibernate-Annotation da vida mas ja ajuda bastante…

Ex.:

/**
*@hibernate.class table = "Pessoa"
*/
public class Pessoa

Até agora tem dado conta do recado legal…
Ah e voce nao ira fugir de configurar o hibernate.cfg.xml.

Mas fazer o que né…
Mas esse nao é o caso aqui do projeto usamos o Spring pra controle transacional ai tem só o XMLao do Spring…

Valeu? Até… :thumbup:
[]s

Na minha opinião, a principal vantagem dos annotations é as facilidades que um Eclipse da vida te proporciona: auto-complete e detecção do erro de código logo que você digitou facilita MUITO.

Num projeto no qual terminei agora onde tenho mais de 100 classes mapeadas pro hibernate a quantidade de arquivos (HBMs) que nao teria de criar ( mesmo usando XDocler) e dar manutencao seria uma vantagem. Esta tudo na minha classe no mesmo lugar.

Minha experiência diz: NÃO USEM O XDOCLET.

Por que? Por mais que o XDoclet cubra 90% das configurações do Hibernate ele nunca vai cobrir 100%.
Ajustes finos na configuração. O XDoclet não lhe permite fazer muita coisa, que se você fizesse teria um ganho considerado. Uma vez que o XDoclet não suporta, e nunca vai suportar (é impossivel), muita coisa na hora de criar as suas classes você vai sempre pelo que existe no XDoclet, não pelo que existe no Hibernate.

Vamos lá, uma vez que você aprenda o XML do Hibernate é molezinha configurar aquilo. Ainda mais com uma Hibernate IDE da vida.

Se vocês mesmo assim resolverem usar o XDoclet, pelo menos usem o XDoclet 2.

Abraços,
Jose Peleteiro

Por exemplo?

[quote=plentz]Sim Sérgio. Na verdade, não é totalmente sem configuração. Usando annotations você ainda assim precisa declarar seus beans no hibernate.cfg.xml, mas não passa de uma linha:

<mapping class="org.mentawaiframework.User" />

Ueh, vc pode criar a SessionFactory passando um objeto Configuration pra ela. Ou seja, sem nenhum XML.

http://www.hibernate.org/hib_docs/reference/en/html/session-configuration.html

:wink:

Por exemplo?[/quote]

Arrays e Maps por exemplo, e um bocado de atributos.

Acredite em mim, eu sou um committer do XDoclet2/Generama e junto com o Konstantin desenvolvedor do plugin para o Hibernate. Hoje eu não uso mais o XDoclet, logo não participo mais do seu desenvolvimento.

Poderia ser mais expecifico ?

Poderia ser mais expecifico ?[/quote]

Criação de arrays e maps. Da uma olhada na documentação do Hibernate e procura pelas funcionalidade no XDoclet. Vai ter um monte, as principais, mas não todas.

Algumas agente não implementou por que não dava. Faz mais de um ano que abandonei o XDoclet depois de usa-lo intenssamente. Hoje estou muito feliz com o hbml.xml ou então annotation.

[quote=Kenobi]
O fator principal para não adotarem o 5 está com a IBM - Websphere e suporte ao novo JEE 5 .

Assim que a IBM soltar release, muita coisa muda por aqui … [/quote]

Aliás, veja se o seu chefe começa a cobrar os seus colegas a não usar as palavras-reservadas do Java 5.0 em código Java 1.3 e 1.4. Já vi muito código respeitável que era assim:

for (Enumeration enum = ... bla bla bla) {
}

Para migrar isso para o Java 5 é fácil (trocar o identificador enum por alguma outra coisa, digamos $enum para não bater com absolutamente mais nada nos seus programas), mas dá um monte de trabalho, e principalmente vocês vão ter de retestar tudo.

Ah, mas dai dependendo da quantidade de classes que você tiver mapeada, IMHO, fica bem feiinho :slight_smile:
Mas que dá, isso dá.

mas respondendo a pergunta. sim, hibernate eh simples. acho que desde sua criacao eh a solucao mais simples que resolve os 90% dos problemas que eles dizem resolver seja, na epoca, atraves de java ou xml, ou agora, atraves de annotations.

ps: desde quase sempre era possivel fazer td programaticamente, sem xml nenhum.
config.addClass eh o que ha…

[quote=plentz]Ah, mas dai dependendo da quantidade de classes que você tiver mapeada, IMHO, fica bem feiinho :slight_smile:
Mas que dá, isso dá.[/quote]

‘Feinho’ eh diminutivo de Fernando. :mrgreen:

addClass rula, pq vc pode agrupar diversas areas diferentes do seu dominio em metodos separados (addLegacySchemaClasses, addMigrationSchemaClasses, addIceCreamFactoryClasses, e por ai vai), e ir construindo a configuracao a partir de codigo eh sempre bom pra sua IDE, que vai saber refatorar seu codigo sempre.

Hum, pensando por esse lado de refatorar e deixar a IDE a par da zona toda até que concordo.

Na verdade, o principal motivo de estarmos usando o xml no projeto que estou agora (mas que pode tranquilamente ser trocado), é que peguei o Hibernate tools, mandei fazer a engenharia reversa da base (e já era um monstrinho de 500+ tabelas) e ele de quebra já gerou o xml pra mim. :mrgreen:

Pessoal li este tópico e pergunto: Como eu gero automáticamente o mapeamento (xml) através do Eclipse???

Obriagdo.

Utilize o pluin HibernateTools, disponível para você no site oficial do Hibernate.
Ele gera automaticamente os xml de mapeamento.

LOL
Como eu sempre digo, quem não gosta de XML é newba. Hibernate é bom a beça, e ele já faz isto há long time ago. Hibernate é um dos melhores frameworks de persistencia já feitos, usa XML pois XML é o padrão de definição para qualquer framework respeitável.

Hum, brincando um pouco mais, da pra fazer algo tipo isso…

[code] static {
try {
configuration = new AnnotationConfiguration();
for(Class clazz : getClasses(“com.foo.model”)){
configuration.addAnnotatedClass(clazz);
}
configuration.configure();
sessionFactory = configuration.buildSessionFactory();
} catch (Throwable ex) {
logger.fatal(“Something happened here!!! 8-O”, ex);
throw new ExceptionInInitializerError(ex);
}
}

public static List<Class> getClasses(String pckgname) throws ClassNotFoundException {
	List<Class> classes = new ArrayList<Class>();
	ClassLoader cld = Thread.currentThread().getContextClassLoader();
	String path = '/' + pckgname.replace('.', '/');
	URL resource = cld.getResource(path);
	File directory = new File(resource.getFile());
	if (directory.exists()) {
		String[] files = directory.list();
		for (int i = 0; i &lt files.length; i++) {
			if (files[i].endsWith(".class")) {
				classes.add(Class.forName(pckgname + '.'
						+ files[i].substring(0, files[i].length() - 6)));
			}
		}
	} 
	return classes;
}[/code]

E só ir criando as classes sem stress…

Macho que eh macho usa sexp. XML eh coisa de menininha.