Boa tarde,
Estou com o seguinte problema.
Tenho 5 tabelas: Pessoas, imagensdepessoas, Imagens, enderecosdepessoas e enderecos.
Classe Pessoa
@Entity
@Table(name = "pessoas")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class AbstractPessoa implements Serializable {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@Column(name = "id", unique = true, nullable = false, length = 32)
private String id;
@Column(nullable = false)
private String nome;
@Temporal(javax.persistence.TemporalType.DATE)
@Column(nullable = false)
private Date dataDeNascimento;
@Column(nullable = true)
private String observacao;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "imagensdepessoas", joinColumns =
@JoinColumn(name = "pessoa"), inverseJoinColumns =
@JoinColumn(name = "imagem"))
private List<Imagem> imagens;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "enderecosdepessoas", joinColumns =
@JoinColumn(name = "pessoa"), inverseJoinColumns =
@JoinColumn(name = "endereco"))
private List<Endereco> enderecos;
Classe Imagem
@Entity
@Table(name = "imagens")
public class Imagem extends Entidade {
@Lob
@Column(nullable = false)
private byte[] valor;
@ManyToMany(targetEntity = AbstractPessoa.class, mappedBy = "imagens")
private List<AbstractPessoa> pessoas;
Classe Endereço
@Entity
@Table(name = "enderecos")
public class Endereco extends Entidade {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "logradouro", referencedColumnName = "id", nullable = false)
private Logradouro logradouro;
@Column(nullable = true)
private String numero;
@Column(nullable = true)
private String complemento;
@ManyToMany(targetEntity = AbstractPessoa.class, mappedBy = "enderecos")
private List<AbstractPessoa> pessoas;
Quando executo a seguinte linha de código:
pessoaFisica = pessoaFisicaDao.salvar(pessoaFisica);
pessoaFisica retorna apenas a lista enderecos vazia, neste caso de forma correta, pois neste momento nenhum endereço está cadastrado para esta nova pessoa. Porém, ele retorna null para a lista de imagens (esperava-se que ele retornasse também uma lista vazia para imagens, da mesma forma que ocorre com endereço) o que será que está errado?
Segue abaixo as tabelas
delimiter $$
CREATE TABLE `pessoas` (
`id` varchar(32) COLLATE latin1_general_ci NOT NULL,
`nome` varchar(255) COLLATE latin1_general_ci NOT NULL,
`dataDeNascimento` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci$$
delimiter $$
CREATE TABLE `imagensdepessoas` (
`pessoa` varchar(32) COLLATE latin1_general_ci NOT NULL,
`imagem` varchar(32) COLLATE latin1_general_ci NOT NULL,
PRIMARY KEY (`pessoa`,`imagem`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci$$
delimiter $$
CREATE TABLE `imagens` (
`id` varchar(32) COLLATE latin1_general_ci NOT NULL,
`valor` longblob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci$$
delimiter $$
CREATE TABLE `enderecosdepessoas` (
`pessoa` varchar(32) COLLATE latin1_general_ci NOT NULL,
`endereco` varchar(32) COLLATE latin1_general_ci NOT NULL,
PRIMARY KEY (`pessoa`,`endereco`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci$$
delimiter $$
CREATE TABLE `enderecos` (
`id` varchar(32) COLLATE latin1_general_ci NOT NULL,
`logradouro` varchar(32) COLLATE latin1_general_ci NOT NULL,
`numero` varchar(10) COLLATE latin1_general_ci DEFAULT NULL,
`complemento` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci$$
Agradeço toda a ajuda que vier.