1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Salvar objetos de Relacionamento N:1:N

Estou com o seguinte problema: tenho os seguintes relacionamentos:

  • Proprietario com Posse (sendo que um proprietario poderá ter uma ou mais posses)
  • Propriedade com Posse (Sendo que uma propriedade poderá ter uma mais posses)

O que ao salvar um proprietario eu já devo salvar a propriedade ou a lista de propriedade, por consequencia as Posses, que faz a ligação entre proprietario e propriedade. O problema é que não estou conseguindo salvar a propriedade, pois ocorre o seguinte erro abaixo:

javax.servlet.ServletException: javax.ejb.EJBTransactionRolledbackException: org.hibernate.exception.ConstraintViolationException: ERROR: null value in column >"propriedade_id" violates not-null constraint Detalhe: Failing row contains (2, null, null, null, 2, null).

Abaixo segue as minhas classes do domínio:

@Entity
public class Proprietario implements Serializable{

    private static final long serialVersionUID = 5563692153649468712L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @OneToOne
    @NotNull(message = "Todo proprietário precisa estar vinculado a uma pessoa")
    @JoinColumn(name = "pessoa_id")
    private Pessoa pessoa;

    @ManyToMany(cascade = CascadeType.PERSIST)
    @JoinTable(name = "posse")
    private List<Posse> posses;


    public Proprietario(){}

    public Proprietario(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    public void addPosse(Posse posse){
        if(posses == null){
            posses= new ArrayList<Posse>();
        }
        posses.add(posse);
    }
    ........
@Entity
public class Propriedade implements Serializable {

    private static final long serialVersionUID = 4815290005245772840L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @OneToMany(mappedBy = "propriedade", cascade = CascadeType.PERSIST)
    private List<Posse> posses;

    @NotEmpty(message = "O código da propriedade é necesário")
    private String codigoPropriedade;

    @Size(max = 100)
    private String nomePropriedade;

    @ManyToOne
    @NotNull(message = "Toda propriedade precisa ter um muncípio")
    private Municipio municipio;

    @Embedded
    private EnderecoPropriedade enderecoPropriedade;
........

@Entity
public class Posse implements Serializable{

    private static final long serialVersionUID = 4126878482243441586L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @ManyToOne
    @NotNull(message = "Para cada posse é necessário um proprietario")
    @JoinColumn(name = "proprietario_id")
    private Proprietario proprietario;

    @ManyToOne
    @NotNull(message = "Para cada posse é necessário um propriedade")
    @JoinColumn(name = "propriedade_id")
    private Propriedade propriedade;

    @Temporal(TemporalType.DATE)
    private Date dataAquisicao;

Quando vou salvar chamo o método: Salvar Proprietário no meu DAO. Abaixo segue os métodos envolvido no ManagedBean

public void novo(){
    this.pf = ptrMB.getPessoa();
    this.proprietario = new Proprietario(pf);
    this.propriedade = new Propriedade(new EnderecoPropriedade());
    this.posse = new Posse(proprietario, propriedade);
    this.proprietario.addPosse(posse);
}
public void salvar(){
    this.proprietario = this.proprietarioService.save(proprietario);
    this.closeConversation();
    FacesUtil.addMessage("Proprietário com sucesso !", FacesMessage.SEVERITY_INFO);
    propriedade = null;
}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags dao java ou faça a sua própria pergunta.