大家!!我有一个使用以下技术的项目:
所以,我有两个实体:Curso.java和Material.java。每个Curso都可以有各种Material,所以我创建了实体MaterialCurso.java。下面是Classes的代码。 PS:我使用DTO课程。
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
确定。现在是将项添加到List中的方法:
CursoMB.java。
private CursoDTO cursoAuxiliar;
private MaterialCursoDTO materialCursoAuxiliar;
private List<MaterialCursoDTO> listaMaterialCursoDTO;
@PostConstruct
public void inicializar() {
carregandoListaCursosDTO();
cursoAuxiliar = new CursoDTO();
materialCursoAuxiliar = new MaterialCursoDTO();
}
public String listenerAdicionaMaterialCurso() {
if (cursoAuxiliar.getMaterialCurso() == null) {
List<MaterialCursoDTO> listaMaterialCursoDTO = new ArrayList<MaterialCursoDTO>();
cursoAuxiliar.setMaterialCurso(listaMaterialCursoDTO);
}
MaterialCursoDTO materialCurso = new MaterialCursoDTO();
materialCurso.setMaterial(materialCursoAuxiliar.getMaterial());
materialCurso.setQuantidade(materialCursoAuxiliar.getQuantidade());
if (listaMaterialCursoDTO == null) {
listaMaterialCursoDTO = new ArrayList<MaterialCursoDTO>();
}
listaMaterialCursoDTO.add(materialCurso);
return "";
}
执行调试,materialCurso和listaMaterialCursoDTO填充数据,Array也填充了位置,确定。但是,当你看到&#34; cursoAuxiliar&#34; (下面)属性&#34; List materialCurso;&#34;是空的。
public String actionSalvaCurso() {
try {
senatService.incluirCurso(cursoAuxiliar);
FacesContext.getCurrentInstance().addMessage(
null,
new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso",
"Curso cadastrado com sucesso"));
carregandoListaCursosDTO();
cursoAuxiliar = new CursoDTO();
} catch (BusinessException e) {
List<String> listMessage = e.getListMessage();
Iterator<String> itListMessage = listMessage.iterator();
while (itListMessage.hasNext()) {
String message = itListMessage.next();
FacesContext.getCurrentInstance().addMessage(
null,
new FacesMessage(FacesMessage.SEVERITY_ERROR,
"Erro ao salvar Curso", message));
}
}
return "";
}
服务是:
public void incluirCurso(CursoDTO cursoDTO) throws BusinessException {
if (cursoDTO == null) {
throw new BusinessException("Não foi possível cadastrar o Curso");
}
if (cursoDAO.findByNomeCurso(cursoDTO.getNomeCurso()) != null) {
throw new BusinessException("O '" + cursoDTO.getNomeCurso()
+ "' já está cadastrado");
}
Curso curso = mapperConvertObjectFacade.getMapperDTOToEntity().map(
cursoDTO, Curso.class);
cursoDAO.create(curso);
}
请有人帮我搞清楚吗?提前谢谢!!