Problemas em Persistir List<> com Hibernate One-to-Many

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&lt;CursoDTO&gt; {
	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&lt;MaterialCurso&gt; 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&lt;MaterialDTO&gt; {
	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&lt;MaterialCursoDTO&gt; {
	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