Olá galera, tudo bem? Sou novato na área e estou tentando a alguns dias salvar dados de um lugar em outro. Vou explicar…
Tenho três tabelas a princípio: Autores, Acervo, e AcervoxAutores. Tenho vários campos nas mesmas, mas em particular, tenho duas FK na tabela de AcervoxAutores (uma relacionando autores e outra acervo.
Pretendo fazer o seguinte, colocar no xhtml de ACERVO um autoComplete no qual ele pega a lista de autores que eu tenho no meu autoreslist e salve na TABELA de AcervoxAutores.
Por exemplo, se eu colocar como value acervoJsfBean.crudObj.acdd (sendo acdd um campo que possuo em acervo e que seja string) ele está salvando normal na tabela de acervo. Porém não é esse meu objetivo. Quero colocar o bean de acervoxautores.crudObj.( algum dos dois campos que eu tenho na tabela de acervoxautores para salvar lá dentro, mas n está dando certo. Além disso, o código vai ser gerado automático e o campo de acervo deveria pegar o código do acervo
Segue abaixo os códigos relacionados:
AcervoxAutores.java
[code]@Entity
@Table(name = “BIB_ACERVOXAUTORES”)
public class AcervoxAutores implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "GEN_BIBACERVOXAUTORES")
@SequenceGenerator(name = "GEN_BIBACERVOXAUTORES", sequenceName = "GEN_BIBACERVOXAUTORES", allocationSize = 1, initialValue = 1)
@Column(name = "ACXAUT_CODIGO")
private Integer acxautCodigo;
@JoinColumn(name = "ACXAUT_CODAUTOR", referencedColumnName = "AUT_CODIGO")
@ManyToOne
private Autores acxautautor;
@JoinColumn(name = "ACXAUT_CODACERVO", referencedColumnName = "ACE_CODIGO")
@ManyToOne
private Acervo acxautacervo;
public AcervoxAutores() {
}
public AcervoxAutores(Integer acxautCodigo) {
this.acxautCodigo = acxautCodigo;
}
public Integer getAcxautCodigo() {
return acxautCodigo;
}
public void setAcxautCodigo(Integer acxautCodigo) {
this.acxautCodigo = acxautCodigo;
}
public Autores getAcxautautor() {
return acxautautor;
}
public void setAcxautautor(Autores acxautautor) {
this.acxautautor = acxautautor;
}
public Acervo getAcxautacervo() {
return acxautacervo;
}
public void setAcxautacervo(Acervo acxautacervo) {
this.acxautacervo = acxautacervo;
}
@Override
public int hashCode() {
int hash = 0;
hash += (acxautCodigo != null ? acxautCodigo.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof AcervoxAutores)) {
return false;
}
AcervoxAutores other = (AcervoxAutores) object;
if ((this.acxautCodigo == null && other.acxautCodigo != null) || (this.acxautCodigo != null && !this.acxautCodigo.equals(other.acxautCodigo))) {
return false;
}
return true;
}
@Override
public String toString() {
return acxautautor.toString();
}
}
AcervoxAutoresService:
@Stateless
@LocalBean
public class AcervoxAutoresService {
public static final String PREFIXO_OBJETO = "aa";
private static final String QUERY_AcervoxAutores = "select aa from AcervoxAutores aa";
private static final Logger log = LoggerFactory.getLogger(AcervoxAutoresService.class);
@EJB
private CrudService crudService;
private FiltrosConsulta criaFiltros(Map<String, Object> params) {
FiltrosConsulta filtros = new FiltrosConsulta();
filtros.add("UPPER(aa.acxautautor.autCodigo) like :acxautautor", "acxautautor", params.get("acxautautor"), true, FiltrosConsulta.Like.Both);
filtros.add("UPPER(aa.acxautacervo.aceCodigo) like :acxautacervo", "acxautacervo", params.get("acxautacervo"), true, FiltrosConsulta.Like.Both);
return filtros;
}
@TransactionAttribute(TransactionAttributeType.NEVER)
public List<AcervoxAutores> listaAcervoxAutoresRelatorio(Map<String, Object> parametros) {
String orderBy = ServiceUtil.montaOrderBy("acxautCodigo", true, PREFIXO_OBJETO);
return crudService.executeQuery(QUERY_AcervoxAutores, orderBy, criaFiltros(parametros));
}
}
Acervo.java
@Entity
@Table(name = “BIB_ACERVO”)
public class Acervo implements Serializable, Auditable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "GEN_BIBACERVO")
@SequenceGenerator(name = "GEN_BIBACERVO", sequenceName = "GEN_BIBACERVO", allocationSize = 1, initialValue = 1)
@Column(name = "ACE_CODIGO")
private Integer aceCodigo;
@Size(max = 200)
@Column(name = "ACE_TITULO")
private String aceTitulo;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "acxautacervo")
private Collection<AcervoxAutores> bibAcervoxAutoresCollection;
AcervoJsfBean:
@ManagedBean
@ViewScoped //@ViewScoped //@SessionScoped
public class AcervoJsfBean extends BaseCRUDJSFBean {
public static final String RELATORIO_ACERVO = "acervo";
private static Logger log = LoggerFactory.getLogger(AcervoJsfBean.class);
@EJB
private AcervoService a;
@EJB
private TipoMaterialService m;
@EJB
private IdiomaService i;
@EJB
private EditorasService e;
@EJB
private AutoresService y;
@EJB
private ClassificacaoService c;
@EJB
private AcervoxAutoresService aa;
private List<Acervo> acervoList = new ArrayList<Acervo>();
private List<TipoMaterial> TipoMaterialList = new ArrayList<TipoMaterial>();
private List<Idioma> idiomaList = new ArrayList<Idioma>();
private List<Editoras> editorasList = new ArrayList<Editoras>();
private List<Classificacao> classificacaoList = new ArrayList<Classificacao>();
private List<Autores> autoresList = new ArrayList<Autores>();
private List<AcervoxAutores> acervoxautoresList = new ArrayList<AcervoxAutores>();
private String aceTitulo;
private String aceSubtitulo;
private String aceIsbn;
private String aceLocalizacao;
private String aceeditora;
private String aceidioma;
private String aceclass;
private String acetipomate = "";
private Classificacao aceClasFiltro;
public List<AcervoxAutores> getAcervoxautoresList() {
return acervoxautoresList;
}
public void setAcervoxautoresList(List<AcervoxAutores> acervoxautoresList) {
this.acervoxautoresList = acervoxautoresList;
}
public List<Acervo> getAcervoList() {
return acervoList;
}
public void setAcervoList(List<Acervo> acervoList) {
this.acervoList = acervoList;
}
public List<TipoMaterial> getTipoMaterialList() {
return TipoMaterialList;
}
public void setTipoMaterialList(List<TipoMaterial> TipoMaterialList) {
this.TipoMaterialList = TipoMaterialList;
}
public List<Idioma> getIdiomaList() {
return idiomaList;
}
public void setIdiomaList(List<Idioma> idiomaList) {
this.idiomaList = idiomaList;
}
public List<Editoras> getEditorasList() {
return editorasList;
}
public void setEditorasList(List<Editoras> editorasList) {
this.editorasList = editorasList;
}
public List<Classificacao> getClassificacaoList() {
return classificacaoList;
}
public void setClassificacaoList(List<Classificacao> classificacaoList) {
this.classificacaoList = classificacaoList;
}
public Classificacao getAceClasFiltro() {
return aceClasFiltro;
}
public void setAceClasFiltro(Classificacao aceClasFiltro) {
this.aceClasFiltro = aceClasFiltro;
}
public List<Autores> getAutoresList() {
return autoresList;
}
public void setAutoresList(List<Autores> autoresList) {
this.autoresList = autoresList;
}
@Override
protected void setup() {
super.setup();
this.TipoMaterialList = getCrudService().findAll(TipoMaterial.class, "tipoDescricao");
this.idiomaList = getCrudService().findAll(Idioma.class, "idiDescricao");
this.editorasList = getCrudService().findAll(Editoras.class, "ediDescricao");
this.classificacaoList = getCrudService().findAll(Classificacao.class, "clasDescricao");
this.autoresList = getCrudService().findAll(Autores.class, "autDescricao");
this.acervoList = getCrudService().findAll(Acervo.class, "aceCodigo");
}
@Override
public void criaObjeto() {
super.criaObjeto();
Date data = new Date();
crudObj.setAceDatacad(data);
// for (int i = 0; i < 5; i++) { // tenta gravar 5 registros no banco
// Exemplar e = new Exemplar();
// e.setExeCodigo(8);
//
// e.setExeacervo(crudObj); // passa um valor
// e.setExeDatabaixa(data);
// e.setExeVolume(9);
// e.setExeDatacad(data);
// e.setExeExemplar(6);
// e.setExeLocalizacao(“14F”);
// e.setExeMotivbaixa(“Devolução”);
// e.setExeObs(“Observação”);
// e.setExeSituacao(“Baixado”);
// e.setExeVolume(4); // passa um valor
//
//
// crudObj.getBibAcervoCollection().add(e); //adiciona na collection
// }
}
public void geraRelatorioAcervoPDF() {
geraRelatorioAcervo(true);
}
public void geraRelatorioAcervo(boolean isPDF) {
List<Acervo> listaRelatorio = a.listaAcervoRelatorio(montaParametros());
if (isPDF) {
// Relatatório em PDF com folha de rosto padrão
geraRelatorioPDF(listaRelatorio, RELATORIO_ACERVO);
}
}
public AcervoJsfBean() {
}
@Override
public void renovarTabela() {
filtraAcervo();
}
public void filtraAcervo() {
acervoList = a.listaAcervoRelatorio(montaParametros());
}
private Map<String, Object> montaParametros() {
Map<String, Object> p = new HashMap<String, Object>();
p.put("aceTitulo", aceTitulo);
p.put("aceSubtitulo", aceSubtitulo);
p.put("aceIsbn", aceIsbn);
p.put("aceLocalizacao", aceLocalizacao);
p.put("aceeditora", aceeditora);
p.put("aceidioma", aceidioma);
p.put("aceclass", aceclass);
p.put("acetipomate", acetipomate);
return p;
}
public List<Classificacao> completaClassificacao(String query) {
this.classificacaoList = c.findClassificacaoByNome(query);
return c.findClassificacaoByNome(query);
}
public List<Autores> completaAutores(String query) {
this.autoresList = y.findAutoresByNome(query);
return y.findAutoresByNome(query);
}
public List<Acervo> completaAcervo(String query) {
this.acervoList = a.findAcervoByNome(query);
return a.findAcervoByNome(query);
}
Acervo.xhtml (nele só vou pegar a parte do autocomplete:
<p:outputLabel id=“autores_lbl” value=“Autores” for=“acautores”/>
<p:autoComplete id=“acautores” completeMethod="#{acervoJsfBean.completaAutores}" required=“false” multiple=“false” requiredMessage=“Informe o autor” forceSelection=“true” minQueryLength=“1” queryDelay=“1”
dropdown=“true” var=“y” itemLabel="#{y.autDescricao}" itemValue="#{y.autCodigo}" value="#{acervoxAutoresJsfBean.crudObj.acxautautor}">
<p:ajax event=“itemSelect” listener="#{acervoJsfBean.autoresList}"/>
</p:autoComplete> [/code]
OBS: se possível onde tem o value="#{acervoxAutoresJsfBean.crudObj.acxautautor}"> façam o teste com value="#{acervoJsfBean.crudObj.aceTitulo}">
Se puderem ajudar, agradeço muitoo!!