Ajuda com mapeamento de 3 tabelas Annotations

Olá!

Gente o problema é esse:

Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: modelo.Contribuicao column: id_setor (should be mapped with insert="false" update="false")

Onde estou repetindo esse atributo???

Setor

/**
 * <code>
 * <pre>
 * create table setor(
 *      id bigint not null auto_increment,
 *      nome varchar(50) not null,
 *      endereco varchar(60) not null,
 *      constraint fk_chave2 primary key(id)
 * );
 * </pre>
 * </code>
 */
@Entity
@Table(name="setor")
public class Setor implements Serializable{
    @Id
    @Column(name="id")
    @GeneratedValue
    private long id = 0;

    @Basic
    @Column(name="nome")
    private String nome = "";

    @Basic
    @Column(name="endereco")
    private String endereco = "";

/**************  Relacionamento   ***********************************/
    @OneToMany(mappedBy="id")
    private Set <Dizimista> dizimista;

    @OneToMany(mappedBy="id_setor")
    private Set <Contribuicao> contribuicao;
/*********************************************************************/

Dizimista:

/**
 * <code>
 * <pre>
 * create table dizimista(
 *      id bigint not null auto_increment,
 *      id_setor bigint not null,
 *      nome varchar(50),
 *      endereco varchar(60) not null,
 *      data_nascimento date,
 *      constraint fk_chave1 primary key(id),
 *      constraint fk_estrangeira1 foreign key(id_setor) references setor(id)
 *      on update cascade
 *      on delete cascade
 * );
 * </pre>
 * </code>
 */
@Entity
@Table(name="dizimista")
public class Dizimista implements Serializable{

    @Id
    @Column(name="id")
    @GeneratedValue
    private long id = 0;

    @Basic
    @Column(name="id_setor")
    private long id_setor = 0;

    @Basic
    @Column(name="nome")
    private String nome = "";

    @Basic
    @Column(name="endereco")
    private String endereco = "";

    @Column(name="data_nascimento")
    @Temporal(TemporalType.DATE)
    private Date data_nascimento = null;

 /**************  Relacionamento   ***********************************/
    @ManyToOne
    @JoinColumn(name="id_setor")
    private Setor setor;

    @OneToOne(cascade = CascadeType.ALL)
    private Contribuicao contribuicao;
/*********************************************************************/

Contribuição:

/**
 *
 * <code>
 * <pre>
 * create table contribuicao(
 *      data_contribuicao date not null,
 *      id_dizimista bigint not null,
 *      id_setor bigint not null,
 *      janeiro tinyint,
 *      fevereiro tinyint,
 *       ...
 *      dezembro tinyint,
 *      constraint fk_chave3 primary key(data_contribuicao),
 *      constraint fk_estrangeira2 foreign key(id_dizimista) references dizimista(id),
 *      constraint fk_estrangeira3 foreign key(id_setor) references setor(id)
 *      on update cascade
 *      on delete cascade
 * );
 *
 * </pre>
 * </code>
 */
@Entity
@Table(name="contribuicao")
public class Contribuicao implements Serializable{

    @Id
    @Temporal(TemporalType.DATE)
    @Column(name="data_contribuicao")
    private Date data_contribuicao = null;

    @Basic
    @Column(name="id_dizimista")
    private long id_dizimista = 0;

    @Basic
    @Column(name="id_setor")
    private long id_setor = 0;

    @Basic
    @Column(name="janeiro")
    private boolean janeiro = false;

    @Basic
    @Column(name="fevereiro")
    private boolean fevereiro = false;

    @Basic
    @Column(name="marco")
    private boolean marco = false;

    @Basic
    @Column(name="abril")
    private boolean abril = false;

    @Basic
    @Column(name="maio")
    private boolean maio = false;

    @Basic
    @Column(name="junho")
    private boolean junho = false;

    @Basic
    @Column(name="julho")
    private boolean julho = false;

    @Basic
    @Column(name="agosto")
    private boolean agosto = false;

    @Basic
    @Column(name="setembro")
    private boolean setembro = false;

    @Basic
    @Column(name="outubro")
    private boolean outubro = false;

    @Basic
    @Column(name="novembro")
    private boolean novembro = false;

    @Basic
    @Column(name="dezembro")
    private boolean dezembro = false;

/**************  Relacionamento   ***********************************/
    @ManyToOne
    @JoinColumn(name="id_setor")
    private Setor setores;
  
    @OneToOne(cascade = CascadeType.ALL)
    private Dizimista dizimistas;

/*********************************************************************/

Desde já, muito obrigado pelas respostas.

parceiro! faz assim,


    @ManyToOne(fetch=FetchType.LAZY)  
    @JoinColumn(name="id_setor", insertable = true, updatable = true, nullable = false)     
    private Setor setores; 

Testa depois me fala se deu certo! OUTRA COISA PRECISO SABER URGENTE! ONDE VC GEROU ESSAS ANOTAÇÕES VC FEZ NA MÃO OU UTILIZOU ALGUM PROGRAMA!

[quote=hvivox]parceiro! faz assim,


    @ManyToOne(fetch=FetchType.LAZY)  
    @JoinColumn(name="id_setor", insertable = true, updatable = true, nullable = false)     
    private Setor setores; 

Testa depois me fala se deu certo! OUTRA COISA PRECISO SABER URGENTE! ONDE VC GEROU ESSAS ANOTAÇÕES VC FEZ NA MÃO OU UTILIZOU ALGUM PROGRAMA!

[/quote]

Não funcionou… a respeito das anotações, fiz todas na mão mesmo… fiz essa modificação e o erro mudou:

Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: modelo.Contribuicao.setor in modelo.Setor.contribuicao

Somente a tabela Setor está inserindo no banco :cry:

O hibernate faz a persistência de objetos, correto. Blz
Já vi alguns exemplos onde o atributo da tabela que faz uma referência a outra tabela não é preenchido. Ex.:

Tabela A( id; id_B; )

Na hora de inserir no banco, o atributo id_B não tem nenhum dado. E o mapeamento fica assim:

@ManyToOne
@JoinColumn(name="id_B")
private B b;

Tabela B(
id;
)

@OneToMany(mappedBy="B")
private Set < A > a;

Por favor me corrijam se eu estiver errado.

Tabela Dizimista:

/**
 * &lt;code&gt;
 * &lt;pre&gt;
 * create table dizimista(
 *      id bigint not null auto_increment,
 *      id_setor bigint not null,
 *      nome varchar(50),
 *      endereco varchar(60) not null,
 *      data_nascimento date,
 *      constraint fk_chave1 primary key(id),
 *      constraint fk_estrangeira1 foreign key(id_setor) references setor(id)
 *      on update cascade
 *      on delete cascade
 * );
 * &lt;/pre&gt;
 * &lt;/code&gt;
 */
@Entity
@Table(name=&quot;dizimista&quot;)
public class Dizimista implements Serializable{

    @Id
    @Column(name=&quot;id&quot;)
    @GeneratedValue
    private long id = 0;

    @Basic
    @Column(name=&quot;id_setor&quot;, insertable = false, updatable = false)
    private long id_setor = 0;

    @Basic
    @Column(name=&quot;nome&quot;)
    private String nome = &quot;&quot;;

    @Basic
    @Column(name=&quot;endereco&quot;)
    private String endereco = &quot;&quot;;

    @Column(name=&quot;data_nascimento&quot;)
    @Temporal(TemporalType.DATE)
    private Date data_nascimento = null;

 /**************  Relacionamento   ***********************************/
    @ManyToOne
    @JoinColumn(name=&quot;id_setor&quot;, insertable = false, updatable = false)
    private Setor setor;

    @OneToOne(cascade = CascadeType.ALL)
    private Contribuicao contribuicao;
/*********************************************************************/

Tabela Contribuicao:

/**
 *
 * &lt;code&gt;
 * &lt;pre&gt;
 * create table contribuicao(
 *      data_contribuicao date not null,
 *      id_dizimista bigint not null,
 *      id_setor bigint not null,
 *      janeiro tinyint,
 *      fevereiro tinyint,
 *      marco tinyint,
 *      abril tinyint,
 *      maio tinyint,
 *      junho tinyint,
 *      julho tinyint,
 *      agosto tinyint,
 *      setembro tinyint,
 *      outubro tinyint,
 *      novembro tinyint,
 *      dezembro tinyint,
 *      constraint fk_chave3 primary key(data_contribuicao),
 *      constraint fk_estrangeira2 foreign key(id_dizimista) references dizimista(id),
 *      constraint fk_estrangeira3 foreign key(id_setor) references setor(id)
 *      on update cascade
 *      on delete cascade
 * );
 *
 * &lt;/pre&gt;
 * &lt;/code&gt;
 */
@Entity
@Table(name=&quot;contribuicao&quot;)
public class Contribuicao implements Serializable{

    @Id
    @Temporal(TemporalType.DATE)
    @Column(name=&quot;data_contribuicao&quot;)
    private Date data_contribuicao = null;

    @Basic
    @Column(name=&quot;id_dizimista&quot;)
    private long id_dizimista = 0;

    @Basic
    @Column(name=&quot;id_setor&quot;, insertable = false, updatable = false)
    private long id_setor = 0;

    @Basic
    @Column(name=&quot;janeiro&quot;)
    private boolean janeiro = false;

    @Basic
    @Column(name=&quot;fevereiro&quot;)
    private boolean fevereiro = false;

    @Basic
    @Column(name=&quot;marco&quot;)
    private boolean marco = false;

    @Basic
    @Column(name=&quot;abril&quot;)
    private boolean abril = false;

    @Basic
    @Column(name=&quot;maio&quot;)
    private boolean maio = false;

    @Basic
    @Column(name=&quot;junho&quot;)
    private boolean junho = false;

    @Basic
    @Column(name=&quot;julho&quot;)
    private boolean julho = false;

    @Basic
    @Column(name=&quot;agosto&quot;)
    private boolean agosto = false;

    @Basic
    @Column(name=&quot;setembro&quot;)
    private boolean setembro = false;

    @Basic
    @Column(name=&quot;outubro&quot;)
    private boolean outubro = false;

    @Basic
    @Column(name=&quot;novembro&quot;)
    private boolean novembro = false;

    @Basic
    @Column(name=&quot;dezembro&quot;)
    private boolean dezembro = false;

/**************  Relacionamento   ***********************************/
//    @ManyToOne
//    @JoinColumn(name=&quot;id_setor&quot;, insertable = false, updatable = false)
//    private Setor setores;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name=&quot;id_setor&quot;, insertable = true, updatable = true, nullable = false)
    private Setor setores;
  
    @OneToOne(cascade = CascadeType.ALL)
    private Dizimista dizimistas;

    
/*********************************************************************/

Tabela Setor:

/**
 * &lt;code&gt;
 * &lt;pre&gt;
 * create table setor(
 *      id bigint not null auto_increment,
 *      nome varchar(50) not null,
 *      endereco varchar(60) not null,
 *      constraint fk_chave2 primary key(id)
 * );
 * &lt;/pre&gt;
 * &lt;/code&gt;
 */

@Entity
@Table(name=&quot;setor&quot;)
public class Setor implements Serializable{
    @Id
    @Column(name=&quot;id&quot;)
    @GeneratedValue
    private long id = 0;

    @Basic
    @Column(name=&quot;nome&quot;)
    private String nome = &quot;&quot;;

    @Basic
    @Column(name=&quot;endereco&quot;)
    private String endereco = &quot;&quot;;

/**************  Relacionamento   ***********************************/
    @OneToMany(mappedBy=&quot;setor&quot;)
    private Set &lt;Dizimista&gt; dizimista;

    @OneToMany(mappedBy=&quot;setor&quot;)
    private Set &lt;Contribuicao&gt; contribuicao;
/*********************************************************************/

parceiro! vc tem que enchugar as anotações, ou seja, vc colocou mapedBy no setor! mais tenho quase certesa que vc não vai nem utilizar as anotações são o reflexo do banco. Coloque relacinamento somente nas entidades que tiverem relacionamento no banco. Vc está fazendo relacionamentos bidirecionais! pra q isso?

Outra coisa para alguém poder te ajudar vc vai ter que explicar as regras de negócio dessas entidades! ou o funcionamento do banco de dados!

flw

Quando vc se refere a mapeamento bidirecional está se referindo a que?

Por exemplo:
Se a classe A tiver vários B o relacionamento fica
@OneToMany
private Set < B > b;

E eu não preciso fazer na classe B
@ManyToOne
private A a;

Como poderia tirar essa bidirecionalidade daqui?

//Contribuicao
@ManyToOne(fetch=FetchType.LAZY)  
@JoinColumn(name="id_setor", insertable = true, updatable = true, nullable = false)  
  private Setor setores;  

//Setor
@OneToMany(mappedBy="setor")
private Set &lt;Contribuicao&gt; contribuicao;