Ola!
Eu estou começando com hibernate e gostaria de saber se em uma classe todos os atributos são ID as classes ficariam assim:
tabela do banco:
SQL> desc aloca_turma_sala;
Name Null? Type
------------------------------- -------- ----
CODCAMPUS NOT NULL VARCHAR2(2)
CODBLOCO NOT NULL VARCHAR2(1)
CODPAVIMENTO NOT NULL NUMBER(5)
CODSALA NOT NULL VARCHAR2(5)
CODTURMA NOT NULL VARCHAR2(7)
HORAINICIO NOT NULL VARCHAR2(5)
HORAFIM NOT NULL VARCHAR2(5)
DIASEMANA NOT NULL VARCHAR2(10)
@Entity
@Table(name="aloca_turma_sala")
public class Aloca implements Serializable{
@EmbeddedId
private AlocaPK id;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="codcampus",insertable=false,updatable=false)
private Campus campus;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumns(value={
@JoinColumn(name="codcampus",insertable=false,updatable=false),
@JoinColumn(name="codbloco",insertable=false,updatable=false)
})
private Bloco bloco;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="codpavimento",insertable=false,updatable=false)
private Pavimento pavimento;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumns(value={
@JoinColumn(name="codsala",insertable=false,updatable=false),
@JoinColumn(name="codcampus",insertable=false,updatable=false),
@JoinColumn(name="codbloco",insertable=false,updatable=false),
@JoinColumn(name="codpavimento",insertable=false,updatable=false),
})
private Sala sala;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="codturma",insertable=false,updatable=false)
private Turma turma;
//gets e sets omitidos
@Embeddable
public class AlocaPK implements Serializable{
@Column(name="codcampus")
private String codCampus;
@Column(name="codbloco")
private String codBloco;
@Column(name="codpavimento")
private Long codPavimento;
@Column(name="codsala")
private String codSala;
@Column(name="codturma")
private String codTurma;
@Column(name="horainicio")
private String horaInicio;
@Column(name="horafim")
private String horaFim;
@Column(name="diasemana")
private String diaSemana;
//gets e sets omitidos
Eu estou postando esta dúvida pois eu to tentando fazer uma busca pelo id nesta classe e dá me dando este erro:
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [br.unig.scif.modelo.Aloca#br.unig.scif.modelo.AlocaPK@191a41d]
at org.hibernate.impl.SessionFactoryImpl$1.handleEntityNotFound(SessionFactoryImpl.java:375)
at org.hibernate.proxy.AbstractLazyInitializer.checkTargetState(AbstractLazyInitializer.java:79)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:68)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:172)
at br.unig.scif.modelo.Aloca$$EnhancerByCGLIB$$f3de347a.getId(<generated>)
at br.unig.scif.bean.AlocaBean.unirTurmasAction(AlocaBean.java:297)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:152)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
at javax.faces.component.UICommand.broadcast(UICommand.java:383)
at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:186)
at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:164)
at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:352)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
O metodo da busca:
public String unirTurmasAction(){
String retorno = "sucesso";
Session session = null;
try{
session = HibernateUtil.getSession();
//deletar as alocações das turmas envolvidas no horario
for (Matriculado matriculado:listaTurmasUnidas){
session = HibernateUtil.getSession();
session.beginTransaction();
AlocaPK id = new AlocaPK();
id.setCodBloco(codbloco);
id.setCodCampus(codcampus);
id.setCodPavimento(codpavimento);
id.setCodSala(codsala);
id.setCodTurma(matriculado.getId().getCodTurma());
id.setDiaSemana(diasemana);
id.setHoraFim(horafim);
id.setHoraInicio(horainicio);
//A busca que dá erro
Aloca aloca = new Dao<Aloca>(session,Aloca.class).procura(id);
System.out.println(aloca.getId().getDiaSemana());//Ele imediatamente dá erro nesta linha
new Dao<Aloca>(session,Aloca.class).remove(aloca);
session.flush();
session.getTransaction().commit();
//Salvar as novas alocações
session.beginTransaction();
new Dao<Aloca>(session,Aloca.class).atualiza(aloca);
session.getTransaction().commit(); }
}catch (Exception e) {
System.out.println("Não foi possivel fazer a uniao de turmas na sala");
retorno = "falha";
e.printStackTrace();
}finally{
session.close();
}
return retorno;
}
o metodo do Dao:
public T procura(Serializable id) {
return (T) session.load(this.classe, id);
}
Se alguém puder me ajudar…
Obs: Quem já viu eu postando já deve ter percebido que to nesse projeto um tempão e não consigo acabar, pois estou começando com hibernate e tá uma luta… :oops: