Hibernate - Entidade sem Id

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

obrigada

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…

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

obrigada[/quote]
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…

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.

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.

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

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!

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+

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

[quote=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.[/quote]

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:

[quote=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.[/quote]
Esse historico é dependente de pessoa? Ele só existe se houver uma pessoa pra ele?

Usa um auto increment no ID e ta morto heheheh

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

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+

[quote=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+[/quote]
Pra falar a verdade eu entendi isso tambem, mas o ideal é sempre a gente confirmar direitinho 8)

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.