Pergunta

As minhas desenvolvedores estão travando uma guerra civil. Em um acampamento, eles abraçaram Hibernate e Spring. Do outro lado, eles denunciaram estruturas -. Eles estão considerando Hibernate embora

A questão é: Há algum surpresas desagradáveis, fraquezas ou pit-quedas que convertidos novato Hibernate-Spring são susceptíveis de tropeçar em

?

PS: Nós temos uma biblioteca DAO que não é muito sofisticado. Eu duvido que ele tem riqueza do Hibernate, mas está chegando a algum tipo de maturidade (ou seja, não foi mudado nos últimos projectos é incluído).

Foi útil?

Solução

Eu usei Hibernate uma série de vezes no passado. Cada vez que eu correr em casos extremos, onde determinam a sintaxe transformou em uma caçada através da documentação, Google, e versões antigas. É uma ferramenta poderosa, mas mal documentado (última vez que olhei).

Como para a Primavera, apenas sobre cada trabalho que eu entrevistei para ou olhou nos últimos anos envolvidos Primavera, é realmente tornar-se o padrão de fato para Java / web. Usando ele vai ajudar seus desenvolvedores ser mais negociáveis ??no futuro, e ele vai ajudá-lo como você vai ter um grande grupo de pessoas que vai entender a sua aplicação.

Escrevendo o seu próprio quadro é tentador, educativo e divertido. Não tão grande em resultados.

Outras dicas

Eles denunciaram estruturas ?

Isso é loucura. Se você não usar um quadro off-the-shelf, então você criar o seu próprio. Ainda é um quadro.

O Hibernate tem peculiaridades para ter certeza, mas isso é porque o problema que está tentando resolver é complexa. Toda vez que alguém se queixa sobre Hibernate eu lembrá-los de todo o código chato DAO que eles teriam de manter, se eles não estavam a usá-lo.

Algumas dicas:

  • O Hibernate não é nenhum substituto para um projeto de banco de dados boa. Hibernate esquemas são OK, mas você vai ter que ajustá-los ocasionalmente
  • Eventualmente, você vai ter que entender como Hibernate carrega preguiçosos aulas e como isso afeta as coisas. Hibernate modifica o bytecode Java e você terá de mergulhar nas profundezas mais cedo ou mais tarde, se apenas para explicar por ligações entre objetos são nulos.
  • Use anotações, se puder.
  • Aproveite o tempo para aprender as técnicas de ajuste de desempenho do Hibernate, você vai economizar, a longo prazo.

Se você tem um banco de dados bastante complexa, Hibernate pode não ser para você. No trabalho temos um banco de dados bastante complexa, com muitos dados, e Hibernate realmente não funciona para nós. Começamos usando iBATIS vez. No entanto, eu conheço um monte de lojas de desenvolvimento que usam Hibernate com sucesso - e ele faz um monte de trabalho duro para você - por isso vale a pena considerar

.

A primavera é uma boa ferramenta se você sabe como usá-lo corretamente.

Eu diria que os quadros são definitivamente uma coisa boa - como outros já apontaram, você não quer reinventar a roda. Primavera contém uma grande quantidade de módulos que significa que você não terá que escrever muito código. Não sucumbir ao "não foi inventado aqui" síndrome!

preguiçoso carga é o grande pegadinha em aplicações MVC que usam Hibernate para o seu framework de persistência. Você carregar o objeto no controlador e passá-lo para a exibição JSP. Alguns ou todos os membros da classe são proxy e tudo explode porque você sessão Hibernate foi fechada quando o controlador concluída.

Você precisa ler o sessão aberta na vista artigo para entender o problema e obter um solução. Se você estiver usando Primavera a este artigo de blog descreve o solução de mola para a sessão aberta na edição vista.

Esta é uma coisa (que eu poderia lembrar) que caí quando eu estava nos meus dias Hibernate. Ao excluir (vários) objetos filho de uma coleção (em uma entidade pai) e depois adicionar novas entidades para a mesma coleção em uma transação sem rubor no meio, o Hibernate irá fazer "insert" antes "delete". Se a tabela de criança tem uma restrição exclusiva em uma de suas colunas, e você está esperando que você não violá-la desde que você já tenha apagado alguns dados antes (como eu estava), então prepare-se para ser frustrado. fórum Hibernate sugere:

  1. Foi um DB falha de design, redesign;
  2. flush (ou cometer se quiser) entre as exclusões e inserções;

Eu não podia fazer as duas coisas, e acabam aprimorando a fonte Hibernate e recompilar. Foi apenas uma linha de código. Mas o esforço para descobrir que uma linha foi igual a cerca de 27 xícaras de café e 3 noites sem dormir.

Este é apenas um exemplo dos problemas e peculiaridades que você pode acabar quando se utiliza Hibernate sem verdadeiro especialista em sua equipe (especialista: alguém com conhecimento adequado sobre a filosofia e funcionamento interno do Hibernate). Seu problema, solução, litro de café, e contagem de noite sem dormir pode variar. Mas você começa a idéia.

Eu não tenho trabalhado muito com Java, mas eu fiz o trabalho em grandes grupos de desenvolvedores Java. A impressão que eu tenho foi que a Primavera é OK. Mas todo mundo estava chateado com Hibernate. Metade da equipe se perguntou: "Se você pudesse mudar uma coisa, o que você mudaria?" e eles diriam "livrar-se de Hibernate.". Quando eu comecei a aprender Hibernate ele me surpreendeu em incrivelmente complexa, mas eu não aprendi o suficiente (felizmente eu mudei ao longo) para saber se a complexidade era justificada ou não (talvez fosse precisar para resolver alguns problemas complexos).

A equipe se livrou de Primavera em favor do Guice, mas que foi mais como uma mudança política, pelo menos do meu ponto de vista e outros desenvolvedores que eu falei.

Eu sempre achei Hibernate a ser um pouco complexa e difícil de aprender. Mas, como JPA (Java Persistence API) e noreferrer EJB (Enterprise Java Beans) 3.0 tem existido por um tempo as coisas ficaram muito mais fácil, eu prefiro muito mais anotar minhas aulas para criar mapeamentos via JavaDoc ou XML. Confira o href="http://www.hibernate.org/397.html" apoio em Hibernate . O bônus adicional é que é possível (mas não sem esforço) para alterar a estrutura de banco de dados mais tarde, se necessário. Eu tenho usado OpenJPA com grandes resultados.

Ultimamente tenho vindo a utilizar JCR (Java Content Repository) mais e mais. Eu amo o jeito que meus módulos podem compartilhar um único armazenamento de dados e que eu posso deixar a estrutura e propriedades evoluir. Acho que é muito mais fácil trabalhar com nós e propriedades em vez que o mapeamento meus objetos para um banco de dados. Uma boa implementação é Jackrabbit .

Como para a Primavera, tem um monte de características que eu gosto, mas a quantidade de XML necessário para meios configure eu nunca vou usá-lo. Em vez disso eu utilizo Guice e absolutamente amor.

Para roundup, eu iria mostrar seus desenvolvedores duvidar como o Hibernate irá tornar sua vida mais fácil. Como para a Primavera gostaria de verificar a sério se Guice é uma alternativa viável e, em seguida, tentar mostrar como a Primavera / Guice torna o desenvolvimento melhor e mais fácil.

Eu fiz um monte de desenvolvimento Primavera / Hibernate. Com o tempo a maneira como as pessoas costumavam ambos em combinação mudou um pouco. A abordagem original HibernateTemplate provou ser difícil de debug, uma vez que engole e envolve exceções de outra forma útil; falar com a API Hiberante diretamente!

Por favor, mantenha olhando para o SQL gerado (configurar o registro de desenvolvimento para mostrar SQL). Ter uma camada de abstração para o banco de dados não significa que você não tem que pensar em SQL mais; você não vai obter um bom desempenho se o contrário.

Considere o projeto. Tenho escolhido iBatis sobre Hibernate em várias ocasiões em que tivemos rigorosos requisitos de desempenho, sistemas legados complexos ou bom DBA é capaz de escrever excelente SQL.

Quanto Hibernate: uma ferramenta muito boa para a aplicação que lida com um esquema de banco de dados em rápida mudança, uma grande quantidade de mesas, fazer muitas operações CRUD simples. Relatórios com consultas complexas envolvidas são bastante menos bem tratada. Mas nestes casos eu prefiro misturar em JDBC ou consultas nativas. Assim, para uma resposta curta: Eu acho que o tempo gasto na aprendizagem Hibernate é um bom investimento (eles dizem que é compatível com EJB3.0 e padrões JPA, também, mas isso não entram na equação quando eu avaliadas para o meu pessoal uso).

Como para a Primavera ... ver O Bile Blog :)

Lembre-se: estruturas não são prata balas , mas você não deve reinventar a roda quer.

Acho que é realmente ajuda a usar estruturas bem conhecidas, tais como Hibernate, porque ele se encaixa o seu código em um molde específico, ou uma maneira de pensar. Ou seja, desde que você está usando o Hibernate, você escreve código de uma certa maneira, e a maioria se não todos os desenvolvedores que sabem Hibernate será capaz de seguir a sua linha de pensamento com bastante facilidade.

Há uma desvantagem para isso, é claro. Antes de se tornar um tiro desenvolvedor Hibernate quente, você vai achar que você está tentando encaixar um quadrado em um buraco circular. Você sabe o que você quer fazer, e como você deveria fazê-lo antes do Hibernate entrou em cena, mas encontrar o caminho Hibernate de fazê-lo pode levar ... um pouco de tempo.

Ainda assim, para as empresas que frequentemente contratam consultores (que precisam entender um monte de código-fonte em um curto espaço de tempo) ou onde os desenvolvedores assinar e sair com freqüência, ou de onde você simplesmente não quer apostar que o seu principais desenvolvedores vai ficar empregos para sempre e nunca mudar -. Hibernate e outros frameworks padrão são uma boa idéia bastante acho

/ Ace

Spring e Hibernate são estruturas que são difíceis de dominar. Pode não ser uma boa idéia para usá-los em projetos com prazos apertados enquanto você ainda está tentando descobrir os quadros.

Os benefícios dos quadros é, basicamente, para tentar fornecer uma plataforma para permitir códigos consistentes para ser produtos. A partir da experiência, você seria bem aconselhados a ter desenvolvedores experientes com os quadros de ajuste em melhores práticas lugar.

Além disso, dependendo do design do seu aplicativo e / ou banco de dados, existem peculiaridades que você vai precisar para contornar a assegurar que os quadros fazer desempenho não atrapalhar.

Na minha opinião, a maior vantagem de Primavera é que ele incentiva e permite melhores práticas de desenvolvimento, em particular o acoplamento fraco, testes e mais interfaces. Hibernate sem Primavera pode ser muito doloroso, mas os dois juntos são muito úteis.

Retrofitting um projeto existente a qualquer estrutura vai ser doloroso, mas o processo de refatoração muitas vezes tem benefícios graves para a manutenção a longo prazo.

Eu tenho que concordar com muitos posts sobre este. Eu usei tanto, extensivamente, em uma variedade de configurações. Se eu pudesse desfazer uma decisão de projeto seria ter usado Hibernate. Nós realmente orçamentado um lançamento em um de nossos produtos para trocar Hibernate para iBatis e Spring-JDBC para um best-of-all-mundos se aproximam. Eu posso ter um novo desenvolvedor chegar até a velocidade usando Spring-JDBC, Primavera-MVC, Spring-Ioc, e iBatis mais rápido do que se eu apenas encarregado-los com Hibernate.

O Hibernate é muito complicado para este desenvolvedor KISS. E céu ajudá-lo com hibernate se o seu DBA vê o SQL gerado o banco de dados vê e envia de volta com versões otimizadas.

A resposta superior menciona que o Hibernate está mal documentada. Concordo que o manual de referência on-line poderia ser mais completa. No entanto, um livro escrito por autores do Hibernate, ' Java Persistence com Hibernate ' é uma leitura obrigatória para cada Hibernate usuário e muito completo.

@slim - Eu estou com vocês novamente esta manhã.

Parece ser um caso clássico de Não Inventado Aqui Syndrome . Se eles não estão interessados ??em primavera, eles devem considerar outras opções em vez de rolar a sua própria estrutura (se eles reconhecem a fazê-lo ou não). Guice vem à mente como uma possibilidade. Também PicoContainer. Há outros lá fora, dependendo do que você precisa.

Spring e Hibernate definitivamente tornar a vida mais fácil. Começando com eles pode ser um pouco demorado no início, mas você certamente vai beneficiar dele mais tarde. Agora, o XML está sendo substituído por anotações, você não precisa digitar centenas de linhas de XML também.

Você pode querer considerar AppFuse para reduzir sua curva de aprendizado: gerar uma aplicação, estudo e adaptá-lo, e temos que ir.

Frameworks não são maus. até mesmo o Java SDK é um quadro.

O que eles provavelmente lutar é proliferação framework . Você não deve trazer uma estrutura para um projeto apenas para o chute dele, ele deve trazer valor consistente em um tempo razoável. Cada quadro requer uma curva de aprendizado, mas deve recompensá-lo com o aumento da produtividade e apresenta mais tarde.

Se você luta com o código que é difícil de depuração por causa do uso inconsistente do banco de dados, mecanismos de cache complicado, ou uma miríade de outras razões. Hibernate irá adicionar grande valor. além da curva de aprendizagem (que levou cerca de 1 mês de trabalho prático para mim) não havia qualquer armadilhas, desde que você tenha alguém por perto para explicar o básico para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top