Com o ordinal da enum, usando o default do Hibernate
Como String, usando ainda os recursos pré-definidos do Hibernate
Com algum tipo que você define
Porque?
Estou com algumas dúvidas aqui de como seria melhor modelar o mapeamento de um sistema que estou desenvolvendo. Em geral, várias entidades que possuo têm um atributo que é mapeado para valores pré-definidos em uma tabela do banco, como estado civil, grau de instrução, etc. Criei enums para estes valores, mas não sei qual seria a melhor forma de mapeá-los.
Pensando melhor aqui, creio que se eu tenho uma enum com os valores possíveis, não haveria necessidade de manter estes valores em uma tab ela no banco também, certo? A própria aplicação cuidaria disso de maneira transparente… Mas e quando tenho muitos valores possíveis? ainda valeria à pena deixar tudo dentro de uma enum?
Eu acredito que dependendo do número de valores, valeria continuar utilizando o enum sim.
Só acho que se for realmente muito grande, daí talvez valha a pena criar uma tabela no banco.
Bom, minha opinião.
Cara o problema de voce deixar varios valores no ENUM é depois se tiver que modificar alguma coisa, já no banco ficaria mais fácil e com os dados a sua disposição para uma possivel consultar avançada.
Eu estou utilizando como String mesmo, mas em outro projeto que tenho, onde uso JDBC mas pretendo ao poucos migrar tudo pra Hibernate, acho que terei que usar int. Como neste outro projeto a base é legada, acho que vale à pena utilizar o que está no banco mesmo mas ainda assim mapear para enum, pra garantir o type safe.
A vantagem de deixar no banco é que você economiza espaço mantendo um small int por exemplo, ao invés de um varchar para cada registro da tabela. Outra coisa é se o memso banco for acessado por outra aplicação, podem surgir incompatibilidades com a maneira como as aplicações representam as enumerações.
Mas para aplicações novas acredito que, salvo casos com dezenas de valores, vale a pena deixar tudo só nas enums mesmo.