Hibernate mapeamento um para muitos

Estou tentando fazer um mapeamento um para muitos, mas não esta dando certo:

<hibernate-mapping package="com.pacotes.bean">
    <class name="ContaDTO" table="Contas">
        
        <id name="contaID">
            <generator class="sequence">
                <param name="sequence">GENCONTAID</param>
            </generator>
        </id>
        
        <property name="conta"/>

        <many-to-one
            name="usuario"
            column="usuarioID"
            class="UsuarioDTO"
            not-null="true"/>
    </class>
</hibernate-mapping>
<hibernate-mapping package="com.pacotes.bean">
    <class name="UsuarioDTO" table="Usuarios">
        <id name="usuarioID">
            <generator class="sequence">
                <param name="sequence">GENUSUARIOID</param>
            </generator>
        </id>
        <property name="status"/>
        <property name="nome"/>
        <property name="email"/>
        <property name="usuario"/>
        <property name="senha"/>
        <property name="data" type="java.util.Date"/>

        <set name="contas" inverse="true" table="Contas">
            <key column="usuarioID"/>
            <one-to-many class="ContaDTO"/>
        </set>
    </class>
</hibernate-mapping>

As tabelas são as seguintes:

Tabelas Usuarios
USUARIOID
STATUS
NOME
EMAIL
USUARIO
SENHA
DATA

Tabela Contas
CONTAID
USUARIOID
CONTA

O que está errado?

Depois de tanto pesquisar descobri que faltava colocar nos POJOs isso aqui:

private Set usuario = new HashSet(); no ContaDTO

e

private Set contas = new HashSet(); no UsuarioDTO

Alguém poderia me explicar para que serve esses Set e HashSet para fazer o mapeamento?

Além disso agora esta ocorrendo este erro:

org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.pacotes.bean.UsuarioDTO.usuarioID

Estranho porque ele tinha que pegar o usuarioID do ContaDTO que estou setando com o binding e não do UsuarioDTO, alguma sugestão?

Obrigado!

No hibernate 'e assim q funciona o relacionamento one-to-many, seu um pai tem varios filhos, entao o pai tera um Set contendo as referencias p/ todos os seus filhos, ao passo de q o filho tera uma referencia para o seu pai, se preferir pode torcar o Set por List, mais fara com q vc tenha q mudar a tag <set> </set> p/ <list></list> eu acho. Outra coisa, nao instacie uma classe para o Set, deixe somente na sua declaracao

private Set usuario ;

o hibernate se preocupa em inplementar a melhor classe.

verifique se o metodo get do ‘usuarioID’ retorna o mesmo tipo setado no set, por exemplo se no set vc setou String, o get tem que retornnar string.

Está quase funcionando… olhe meus POJO´s abaixo:

public class ContaDTO &#123;
    private Integer id;
    private UsuarioDTO usuario;
    private String conta;

//gets e sets...
&#125;
public class UsuarioDTO &#123;
    private Integer id;
    private Integer status;
    private String nome;
    private String email;
    private String usuario;
    private String senha;
    private String senhaR;
    private Date data;
    private Set contas;
//gets e sets...    
&#125;

Agora a exceção gerada no momento do cadastro de uma conta do usuário é:
Hibernate: /* insert com.pacotes.bean.ContaDTO */ insert into Contas (conta, usuarioID, id) values (?, ?, ?)
org.hibernate.exception.GenericJDBCException: could not insert: [com.pacotes.bean.ContaDTO]

Depurando o código percebi que o objeto usuario do ContaDTO está como null, devo setar esse valor com um binding ou é alguma configuração nos hbm.xml?

Obrigado pela ajuda!

Depois de tanto insistir descobri que fazendo do jeito abaixo funciona para cadastrar:

UsuarioDTO usuarioDTO = (UsuarioDTO)sessao.get(UsuarioDTO.class, new Integer(usuarioID));
contaDTO.setUsuario(usuarioDTO);
usuarioDTO.getContas().add(contaDTO);
sessao.save(contaDTO);

e porque para fazer o sessao.saveOrUpdate e o sessao.delete não preciso instanciar o usuarioDTO?

Obrigado

Pessoal, já que existe um tópico sobre isso gostaria de tirar uma dúvida.
Tbm estou fazendo o relacionamento um pra muitos. Tipo: um curso tem várias disciplinas.

Vejam os meus POJOs:

[code]package hibernate;

public class Curso
{
// <editor-fold defaultstate=“collapsed” desc=“Propriedades”>
private String descricao;
private String nome;

private Disciplina disciplinas;

private Integer id;
// &lt;/editor-fold&gt;
// &lt;editor-fold defaultstate="collapsed" desc="Métodos"&gt;
public String getDescricao() {
    return descricao;
}

public void setDescricao(String descricao) {
    this.descricao = descricao;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public Disciplina getDisciplinas() {
    return disciplinas;
}

public void setDisciplinas(Disciplina disciplinas) {
    this.disciplinas = disciplinas; 
}
// &lt;/editor-fold&gt;
// &lt;editor-fold defaultstate="collapsed" desc="Construtor"&gt;
public Curso()
{ }
// &lt;/editor-fold&gt;

}[/code]

E a implementação:

[code]Disciplina D1 = new Disciplina();
D1.setNome("Matemática");
D1.setEmenta("123456789");

Curso curso = new Curso();
curso.setNome("Supletivo");
curso.setDescricao("Descrição da disciplina em questão.");

D1.setCurso(curso);
curso.setDisciplinas(D1);

sessao.save(curso);[/code]

Mas está dando o seguinte erro:

[color=red]log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Initializing c3p0 pool… com.mchange.v2.c3p0.PoolBackedDataSource@15e83f9 [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@910040 [ acquireIncrement -> 2, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, idleConnectionTestPeriod -> 3000, initialPoolSize -> 2, maxIdleTime -> 5000, maxPoolSize -> 10, maxStatements -> 10, maxStatementsPerConnection -> 0, minPoolSize -> 2, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@12d3205 [ description -> null, driverClass -> null, factoryClassLocation -> null, jdbcUrl -> jdbc:mysql://localhost/hibernate?autoReconnect=true, properties -> {user=******, password=******} ] , preferredTestQuery -> null, propertyCycle -> 300, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, usesTraditionalReflectiveProxies -> false ] , factoryClassLocation -> null, numHelperThreads -> 3, poolOwnerIdentityToken -> 15e83f9 ]
Exception in thread "main" java.lang.ClassCastException: hibernate.Disciplina cannot be cast to java.util.Set
at org.hibernate.type.SetType.wrap(SetType.java:39)
at org.hibernate.event.def.WrapVisitor.processArrayOrNewCollection(WrapVisitor.java:83)
at org.hibernate.event.def.WrapVisitor.processCollection(WrapVisitor.java:50)
at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:104)
at org.hibernate.event.def.WrapVisitor.processValue(WrapVisitor.java:97)
at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:58)
at org.hibernate.event.def.AbstractSaveEventListener.visitCollectionsBeforeSave(AbstractSaveEventListener.java:281)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:222)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:160)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:108)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:481)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:476)
at Hibernate.main(Hibernate.java:85)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)[/color]

O que posso fazer?