Saudações. Tenho um projeto que utiliza as tecnologias abaixo:
- JPA 2.1
- Hibernate 4
- Spring 3
- Orika 1.45
- Oracle 11g
- JSF 2.1
- Primefaces 4
Temos duas entidades Curso.java e Material.java. Um curso pode ter vários materiais, então criamos uma entidade MaterialCurso.java que consolidará os materias de cursos. Em Curso.java foi criado uma List<MaterialCurso> que receberia os materiais referentes àquele curso. Obs: utilizo classes DTO. Abaixo segue o código das entidades.
Problema: Curso.java e Material.java são persistidos normalemente. MaterialCurso.java não é persistido.
Curso.java
@Entity
@Table(name = "CURSO")
@NamedQueries({
@NamedQuery(name = "Curso.findAll", query = "SELECT c FROM Curso c "),
@NamedQuery(name = "Curso.findByNomeCurso", query = "SELECT c FROM Curso c where c.nomeCurso = :nomeCurso ") })
public class Curso extends BaseEntity<CursoDTO> {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name = "CURSO_IDCURSO_GENERATOR", sequenceName = "SEQ_CURSO")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CURSO_IDCURSO_GENERATOR")
@Column(name = "ID_CURSO", unique = true, nullable = false)
private Long idCurso;
@Column(name = "ABREV_CURSO", nullable = false, length = 100)
private String abrevCurso;
@Column(name = "CARGA_HORARIA_CURSO", nullable = false)
private Long cargaHorariaCurso;
@Column(name = "NOME_CURSO", nullable = false, length = 200)
private String nomeCurso;
// bi-directional many-to-one association to Unidade
@ManyToOne
@JoinColumn(name = "ID_UNIDADE")
private Unidade unidade;
// bi-directional many-to-one association to Empresa
@ManyToOne
@JoinColumn(name = "ID_EMPRESA")
private Empresa empresa;
// bi-directional many-to-one association to MaterialCurso
@OneToMany(cascade = CascadeType.ALL , fetch = FetchType.EAGER)
@JoinTable(name = "MATERIAL_CURSO", joinColumns = { @JoinColumn(name = "ID_CURSO") }, inverseJoinColumns = { @JoinColumn(name = "ID_MATERIAL") })
private List<MaterialCurso> materialCurso;
public Curso() {
}
@Override
public String toString() {
return "Curso [idCurso=" + idCurso + ", abrevCurso=" + abrevCurso
+ ", cargaHorariaCurso=" + cargaHorariaCurso + ", nomeCurso="
+ nomeCurso + ", empresa=" + empresa + ", unidade=" + unidade
+ ", materialCurso=" + materialCurso + "]";
}
//getters and setters
Material.java
@Entity
@Table(name = "MATERIAL")
@NamedQueries({
@NamedQuery(name = "Material.findAll", query = "SELECT m FROM Material m"),
@NamedQuery(name = "Material.findByNomeMaterial", query = "SELECT u FROM Material u where u.nomeMaterial = :nomeMaterial ") })
public class Material extends BaseEntity<MaterialDTO> {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name = "MATERIAL_IDMATERIAL_GENERATOR", sequenceName = "SEQ_MATERIAL")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MATERIAL_IDMATERIAL_GENERATOR")
@Column(name = "ID_MATERIAL", unique = true, nullable = false)
private Long idMaterial;
@Column(name = "CODIGO_MATERIAL", length = 100)
private String codigoMaterial;
@Column(name = "NOME_MATERIAL", nullable = false, length = 200)
private String nomeMaterial;
// bi-directional many-to-one association to Unidade
@ManyToOne
@JoinColumn(name = "ID_UNIDADE")
private Unidade unidade;
// bi-directional many-to-one association to Empresa
@ManyToOne
@JoinColumn(name = "ID_EMPRESA")
private Empresa empresa;
// bi-directional many-to-one association to UnidadeMedida
@ManyToOne
@JoinColumn(name = "ID_UNIDADE_MEDIDA", nullable = false)
private UnidadeMedida unidadeMedida;
public Material() {
}
@Override
public String toString() {
return "Material [idMaterial=" + idMaterial + ", codigoMaterial="
+ codigoMaterial + ", nomeMaterial=" + nomeMaterial
+ ", unidade=" + unidade + ", empresa=" + empresa
+ ", unidadeMedida=" + unidadeMedida + "]";
}
//getters and setters
MaterialCurso.java
@Entity
@Table(name = "MATERIAL_CURSO")
@NamedQueries({
@NamedQuery(name = "MaterialCurso.findAll", query = "SELECT m FROM MaterialCurso m"),
@NamedQuery(name = "MaterialCurso.findByIdMaterialCurso", query = "SELECT m FROM MaterialCurso m WHERE m.idMaterialCurso = :idMaterialCurso") })
public class MaterialCurso extends BaseEntity<MaterialCursoDTO> {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name = "MATERIAL_CURSO_IDMATERIALCURSO_GENERATOR", sequenceName = "SEQ_MATERIAL_CURSO")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MATERIAL_CURSO_IDMATERIALCURSO_GENERATOR")
@Column(name = "ID_MATERIAL_CURSO", unique = true, nullable = false)
private Long idMaterialCurso;
@Column(name = "QUANTIDADE", nullable = false)
private Long quantidade;
// bi-directional many-to-one association to Material
@ManyToOne
@JoinColumn(name = "ID_MATERIAL", nullable = false)
private Material material;
// bi-directional many-to-one association to Curso
@ManyToOne
@JoinColumn(name = "ID_CURSO", nullable = false)
private Curso curso;
public MaterialCurso() {
}
@Override
public String toString() {
return "MaterialCurso [idMaterialCurso=" + idMaterialCurso
+ ", quantidade=" + quantidade + ", material=" + material
+ ", curso=" + curso + "]";
}
//getters and setters