Hibernate - Entidade sem Id

15 respostas
ps.vale

Gostaria de algum exemplo de mapeamento de entidade, de uma entidade que não possui ID.
estou fazendo mapeamento por xml

obrigada

15 Respostas

Victor_Neves

O hibernate (especificamente na versao 3.2.4 , nao sei nas outras ) lança excessão se nao tiver ID.
o hibernate admite que cada entidade terá automaticamente seu ID.

lembrando que é um “erro” uma entidade nao ter uma chave primária…

Carlos_ds_jar

ps.vale:
Gostaria de algum exemplo de mapeamento de entidade, de uma entidade que não possui ID.
estou fazendo mapeamento por xml

obrigada


ate onde estudei nunca vi uma entidade sem ID e até acho algo meio sem sentido em uma tabela existirem tuplas que não podem ser idenficadas unicamente. :shock:
Mas se vc esplicar melhor o seu problema podemos sugerir algo…

Vinny

Não tem com mapear uma entidade sem ID, o ID é o que difere cada registro de uma tabela, mesmo que sua tabela so vá ter um registro(não sei se é seu caso) tem que ter o ID.

ps.vale

No meu caso, tenho uma tabela pessoa, e tem seu histórico, o histórico não precisa necessariamente de um id, pq ele precisa apenas do Id da pessoa para saber de quem é o histórico.

Mesmo usando uma foreign key de outra tabela, não posso deixar a entidade sem id?

Muito obrigada pelas respostas, vou repensar no diagrama, porque não fui eu quem fez, apenas estou seguindo o modelo exigido pela empresa, vou repensar mesmo assim, obrigadaa de verdade.

marcos1EM

eu tmb acho sem sentido a sua classe n ter ID, assim como disse o Carlos_ds_jar eu nunca vi tabela sem ID, o fato de vc apenas preciar saer a quem pertence o historico não justifica o fato de ter q existir um identificar na tabela de historico

Vinny

Faz um relacionamento onde se define como ID na tabela historico o mesmo ID da classe cliente, seria um relacionamento 1x1, pelo que eu intendi todo cliente tem um registro na tabela historico, se for isso mesmo faz o que eu te disse o ID da tabela historico é o mesmo ID da tabela cliente ai resolve seu problema!

quikkoo

nesse caso o tabela historico teria sim uma chave primaria, mas ela tb seria ao mesmo tempo uma chave estrageira assossiada à tabela pessoa, o mapeamento com xml (resumido) pra isso ficaria assim:

// Pessoa.hbm.xml
<class name="Pessoa">
	<id name="id">
		<generator class="increment" />
	</id>

	...

	<one-to-one name="historico" class="Historico" cascade="save-update" />

	...

</class>

// Historico.hbm.xml
<class name="Historico">
	<id name="id">
		<generator class="foreign">
			<param name="property">pessoa</param>
		</generator>
	</id>

	...

</class>

tenho pouca experência com anotações, e do jeito q eu pensei ñ sei se seria o certo pois a aprte do generator e do param me confundiu se alguem puder ajudar nessa parte até eu agradeceria

flw, t+

Andre_Brito

Você não poderia trocar isso por embedded (aka, components)?

lelodois

ps.vale:
No meu caso, tenho uma tabela pessoa, e tem seu histórico, o histórico não precisa necessariamente de um id, pq ele precisa apenas do Id da pessoa para saber de quem é o histórico.

Mesmo usando uma foreign key de outra tabela, não posso deixar a entidade sem id?

Muito obrigada pelas respostas, vou repensar no diagrama, porque não fui eu quem fez, apenas estou seguindo o modelo exigido pela empresa, vou repensar mesmo assim, obrigadaa de verdade.

O id da tabela histórico deveria ser o id da pessoa + data ou algo que diferencie as entradas no histórico (status, situação ou algo do tipo).

Somente o id da pessoa não pode, pois provavelmente uma pessoa pode ter vários históricos.

:slight_smile:

Carlos_ds_jar

ps.vale:
No meu caso, tenho uma tabela pessoa, e tem seu histórico, o histórico não precisa necessariamente de um id, pq ele precisa apenas do Id da pessoa para saber de quem é o histórico.

Mesmo usando uma foreign key de outra tabela, não posso deixar a entidade sem id?

Muito obrigada pelas respostas, vou repensar no diagrama, porque não fui eu quem fez, apenas estou seguindo o modelo exigido pela empresa, vou repensar mesmo assim, obrigadaa de verdade.


Esse historico é dependente de pessoa? Ele só existe se houver uma pessoa pra ele?

Felagund

Usa um auto increment no ID e ta morto heheheh

Carlos_ds_jar

Essa solução é pra resolver de qualquer maneira… kkkkkk

quikkoo

pelo q entendi na postagem da ps.vale, cada pessoa possui apenas um histórico, e um histórico só existiria se existisse uma pessoa para assossiar, por isso postei aquele mapeamento, agora se ñ foi isso seria mesmo interessante a ps.vale esclarecer pq realmente faz diferença no mapeamento das entidades

t+

Carlos_ds_jar

quikkoo:
pelo q entendi na postagem da ps.vale, cada pessoa possui apenas um histórico, e um histórico só existiria se existisse uma pessoa para assossiar, por isso postei aquele mapeamento, agora se ñ foi isso seria mesmo interessante a ps.vale esclarecer pq realmente faz diferença no mapeamento das entidades

t+


Pra falar a verdade eu entendi isso tambem, mas o ideal é sempre a gente confirmar direitinho 8)

Felagund

Na verdade usar o auto_increment ajuda a criar o ID da tabela de forma mais facil, o que acredito que seja o caso dela é que uma pessoa pode ter varios registros no histórico, então usar o id da entidade pessoa não se torna valido, lembrando que seu ID deve ser único, se não o hibernate vai se perder todo.

Criado 11 de agosto de 2010
Ultima resposta 13 de ago. de 2010
Respostas 15
Participantes 9