Help Netbeans + JPA

1 resposta
fabioebner
Pessoal seguinte. criei o seguinte banco:
CREATE TABLE db_notas.tb_titulo(
  cd_titulo SERIAL PRIMARY KEY,
  nm_titulo VARCHAR(250) NOT NULL,
  ds_titulo VARCHAR(250)
);

CREATE TABLE db_notas.tb_exigencia(
  cd_exigencia SERIAL PRIMARY KEY,
  nm_exigencia VARCHAR(250) NOT NULL,
  ds_exigencia TEXT,
  vl_exigencia NUMERIC(12,2)
) ;

CREATE TABLE db_notas.tb_natureza(
  cd_natureza SERIAL PRIMARY KEY,
  nm_natureza VARCHAR(250) NOT NULL,
  ds_natureza VARCHAR(250),
  nr_dias_previsto integer,
  cd_tabela_custa INTEGER,
  nm_modelo_documento VARCHAR(250),
  cd_divisor INTEGER
);

CREATE TABLE db_notas.tb_titulo_natureza(
  cd_titulo INTEGER REFERENCES db_notas.tb_titulo(cd_titulo),
  cd_natureza INTEGER REFERENCES db_notas.tb_natureza(cd_natureza),
  CONSTRAINT tb_titulo_natureza_pk PRIMARY KEY (cd_titulo, cd_natureza)
);


CREATE TABLE db_notas.tb_exigencia_natureza(
  cd_exigencia INTEGER REFERENCES db_notas.tb_exigencia(cd_exigencia),
  cd_natureza INTEGER REFERENCES db_notas.tb_natureza(cd_natureza),
  CONSTRAINT tb_exigencia_natureza_pk PRIMARY KEY (cd_exigencia,cd_natureza)
);

ate ai perfeito.. manei o netbeans gerar as entity class.. agora vem o problema.. qdo ele cria.. a minha entity TbNatureza ele cria com o join ta tbTitulo, porem o join com a TbExigencia ele nao cria na TbNatureza e sim na TbExigencia.. alguem sabe o pq?? (pois qdo eu salvo ou altero uma natureza ele nao salva no banco as exigencias daquela natureza)

segue abaixo as entitys

TbTitulo
@Entity
@Table(name = "tb_titulo")
@NamedQueries({@NamedQuery(name = "TbTitulo.findByCdTitulo", query = "SELECT t FROM TbTitulo t WHERE t.cdTitulo = :cdTitulo"), @NamedQuery(name = "TbTitulo.findByNmTitulo", query = "SELECT t FROM TbTitulo t WHERE t.nmTitulo = :nmTitulo"), @NamedQuery(name = "TbTitulo.findByDsTitulo", query = "SELECT t FROM TbTitulo t WHERE t.dsTitulo = :dsTitulo")})
public class TbTitulo implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "cd_titulo", nullable = false)
    private Integer cdTitulo;
    @Column(name = "nm_titulo", nullable = false)
    private String nmTitulo;
    @Column(name = "ds_titulo")
    private String dsTitulo;
    @ManyToMany(mappedBy = "cdTituloCollection")
    private Collection<TbNatureza> cdNaturezaCollection;
    @OneToMany(mappedBy = "cdTitulo")
    private Collection<TbIndicadorDocumento> tbIndicadorDocumentoCollection;
    @OneToMany(mappedBy = "cdTitulo")
    private Collection<TbDocumento> tbDocumentoCollection;
TbNatureza
@Entity
@Table(name = "tb_natureza")
@NamedQueries({@NamedQuery(name = "TbNatureza.findByCdNatureza", query = "SELECT t FROM TbNatureza t WHERE t.cdNatureza = :cdNatureza"), @NamedQuery(name = "TbNatureza.findByNmNatureza", query = "SELECT t FROM TbNatureza t WHERE t.nmNatureza = :nmNatureza"), @NamedQuery(name = "TbNatureza.findByDsNatureza", query = "SELECT t FROM TbNatureza t WHERE t.dsNatureza = :dsNatureza"), @NamedQuery(name = "TbNatureza.findByNrDiasPrevisto", query = "SELECT t FROM TbNatureza t WHERE t.nrDiasPrevisto = :nrDiasPrevisto"), @NamedQuery(name = "TbNatureza.findByCdTabelaCusta", query = "SELECT t FROM TbNatureza t WHERE t.cdTabelaCusta = :cdTabelaCusta"), @NamedQuery(name = "TbNatureza.findByNmModeloDocumento", query = "SELECT t FROM TbNatureza t WHERE t.nmModeloDocumento = :nmModeloDocumento"), @NamedQuery(name = "TbNatureza.findByCdDivisor", query = "SELECT t FROM TbNatureza t WHERE t.cdDivisor = :cdDivisor")})
public class TbNatureza implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "cd_natureza", nullable = false)
    private Integer cdNatureza;
    @Column(name = "nm_natureza", nullable = false)
    private String nmNatureza;
    @Column(name = "ds_natureza")
    private String dsNatureza;
    @Column(name = "nr_dias_previsto")
    private Integer nrDiasPrevisto;
    @Column(name = "cd_tabela_custa")
    private Integer cdTabelaCusta;
    @Column(name = "nm_modelo_documento")
    private String nmModeloDocumento;
    @Column(name = "cd_divisor")
    private Integer cdDivisor;

******************* AQUI ESTA O JOIN DA TBTITULO AQUI ESTA CORRETO *************************
    @JoinTable(name = "tb_titulo_natureza", joinColumns = {@JoinColumn(name = "cd_natureza", referencedColumnName = "cd_natureza")}, inverseJoinColumns = {@JoinColumn(name = "cd_titulo", referencedColumnName = "cd_titulo")})
    @ManyToMany
    private Collection<TbTitulo> cdTituloCollection;
************* AQUI TINHA Q ESTAR O JOIN DA TBEXIGENCIA MAS ELE NAO ESTA AQUI ELE CRIA NA TBEXIGENCIA**************
    @ManyToMany(mappedBy = "cdNaturezaCollection")
    private Collection<TbExigencia> cdExigenciaCollection;
    @OneToMany(mappedBy = "cdNatureza")
    private Collection<TbIndicadorDocumento> tbIndicadorDocumentoCollection;
    @OneToMany(mappedBy = "cdNatureza")
    private Collection<TbDocumento> tbDocumentoCollection;
TbExigencia
@Entity
@Table(name = "tb_exigencia")
@NamedQueries({@NamedQuery(name = "TbExigencia.findByCdExigencia", query = "SELECT t FROM TbExigencia t WHERE t.cdExigencia = :cdExigencia"), @NamedQuery(name = "TbExigencia.findByNmExigencia", query = "SELECT t FROM TbExigencia t WHERE t.nmExigencia = :nmExigencia"), @NamedQuery(name = "TbExigencia.findByDsExigencia", query = "SELECT t FROM TbExigencia t WHERE t.dsExigencia = :dsExigencia"), @NamedQuery(name = "TbExigencia.findByVlExigencia", query = "SELECT t FROM TbExigencia t WHERE t.vlExigencia = :vlExigencia")})
public class TbExigencia implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "cd_exigencia", nullable = false)
    private Integer cdExigencia;
    @Column(name = "nm_exigencia", nullable = false)
    private String nmExigencia;
    @Column(name = "ds_exigencia")
    private String dsExigencia;
    @Column(name = "vl_exigencia")
    private BigDecimal vlExigencia;
    @JoinTable(name = "tb_exigencia_orgao_emissor", joinColumns = {@JoinColumn(name = "cd_exigencia", referencedColumnName = "cd_exigencia")}, inverseJoinColumns = {@JoinColumn(name = "cd_orgao_emissor", referencedColumnName = "cd_orgao_emissor")})
    @ManyToMany
    private Collection<TbOrgaoEmissor> cdOrgaoEmissorCollection;
********************* ELE POE O JOIN AQUI..*************************
    @JoinTable(name = "tb_exigencia_natureza", joinColumns = {@JoinColumn(name = "cd_exigencia", referencedColumnName = "cd_exigencia")}, inverseJoinColumns = {@JoinColumn(name = "cd_natureza", referencedColumnName = "cd_natureza")})
    @ManyToMany
    private Collection<TbNatureza> cdNaturezaCollection;
    @OneToMany(mappedBy = "cdExigencia")
    private Collection<TbExigenciaDocumento> tbExigenciaDocumentoCollection;

ja tentei mudar a ordem de criacao das tabelas, a ordem de criacao das chaves e nada..

alguem sabe o pq??

valeu

1 Resposta

ThiagoWorldCoder

pelo que parece você quer fazer um save em cascata não é?

tenta colocar no @OnetoMany(cascade=CascadeType.All)

Eu coloquei o CascadeType.All aí só como exemplo, mas você pode escolher qualquer opção que tenha no CascadeType ok!

acho que é isso!

Criado 10 de novembro de 2008
Ultima resposta 10 de nov. de 2008
Respostas 1
Participantes 2