Associação N:N hibernate

Boa tarde a todos, pesquisei em vários locais, li apostilas, consultei a documentação, mas não acho a solução para a seguinte dúvida…
possuo esse relacionamento no banco, e preciso mapealo no hibernate…

1 N N 1 (Codigo da area) AREA -----------> AREA_CLIENTE <----------cLIENTE (codigo do cliente) | |1 | | | |N V OBRA (codigo obra, cod_area, cod_cliente)

Porém, nao encontro exemplos de como fazer tal associação, alguem ja passou por algo assim ?

http://www.mkyong.com/hibernate/hibernate-many-to-many-example-join-table-extra-column-annotation/

[=

Obrigado pelo link, mas não é esse minha dúvida…

explicando melhor…

a Obra só pode existir se houver um relacionamento entre CLIENTE e AREA…
logo, na tabela OBRA irá o código da area e do cliente relacionados…

é isso que nao consigo mapear no hibernate…

Pelo que entendi a persistência dos dados irão acontecer em várias faces: 1-Salvar a associação entre ÁREA e CLIENTE. Se o CLIENTE for dono desse relacionamento, na classe CLIENTE vai esse mapeamento:

@ManyToMany
    @JoinTable(name="cliente_area", 
	    joinColumns = {@JoinColumn(name="CD_CLIENTE")}, 
	    inverseJoinColumns={@JoinColumn(name="CD_AREA")})
    private List&lt;Area&gt; listaArea = new ArrayList&lt;Area&gt;();

Se AREA for a dona do relacionamento, então na classe AREA vai o mapeamento:

@ManyToMany
    @JoinTable(name="area_cliente", 
	    joinColumns = {@JoinColumn(name="CD_AREA")}, 
	    inverseJoinColumns={@JoinColumn(name="CD_CLIENTE")})
    private List&lt;Cliente&gt; listaCliente = new ArrayList&lt;Cliente&gt;();

A 2 face e a gravação da OBRA passando os IDs de Cliente e AREA. Na classe AREA vai o seguinte mapemento:

	@OneToMany(mappedBy="area")
	private List&lt;Obra&gt; listaObras = new ArrayList&lt;Obra&gt;();

E na classe OBRA o mapeamento de AREA:

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "CD_AREA")
    private Area area;

Espero ter ajudado.

[quote=donny]Pelo que entendi a persistência dos dados irão acontecer em várias faces: 1-Salvar a associação entre ÁREA e CLIENTE. Se o CLIENTE for dono desse relacionamento, na classe CLIENTE vai esse mapeamento:

@ManyToMany
    @JoinTable(name="cliente_area", 
	    joinColumns = {@JoinColumn(name="CD_CLIENTE")}, 
	    inverseJoinColumns={@JoinColumn(name="CD_AREA")})
    private List&lt;Area&gt; listaArea = new ArrayList&lt;Area&gt;();

Se AREA for a dona do relacionamento, então na classe AREA vai o mapeamento:

@ManyToMany
    @JoinTable(name="area_cliente", 
	    joinColumns = {@JoinColumn(name="CD_AREA")}, 
	    inverseJoinColumns={@JoinColumn(name="CD_CLIENTE")})
    private List&lt;Cliente&gt; listaCliente = new ArrayList&lt;Cliente&gt;();

A 2 face e a gravação da OBRA passando os IDs de Cliente e AREA. Na classe AREA vai o seguinte mapemento:

	@OneToMany(mappedBy="area")
	private List&lt;Obra&gt; listaObras = new ArrayList&lt;Obra&gt;();

E na classe OBRA o mapeamento de AREA:

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "CD_AREA")
    private Area area;

Espero ter ajudado.[/quote]

Bem, antes de tudo ja agradeço pelo tempo donny…

É quase isso que vc postou, mas eu queria deixar o mapeamento do hibernate semelhante com oque fiz no banco de dados…
ONde:

1-) Uma área pode existir e nao conter clientes.
2-) Um cliente pode existir sem estar em uma área e sem ter uma obra.
3-) Uma obra só pode existir para o cliente que estiver vinculado com uma ou mais áreas.

Então, acredito que o Dono da obra, seja o relacionamento de AREA com CLIENTE…Logo o código desse relacionamento vai na tabela obra para identificá-la…
mas, como fazer isso no Hibernate ?