Olá pessoal!
Estou tendo umas dificuldades em fazer o mapeamento de classes com as anotações do JPA.
Procurei em alguns fóruns e a "dica" para solução do problema se relaciona a recriação do banco. No entanto, esta solução não está servindo no meu caso.
12:43:03,777 WARN [JDBCExceptionReporter] SQL Error: 1364, SQLState: HY000
12:43:03,778 ERROR [JDBCExceptionReporter] Field 'm_QuestoesSecundarias_id' doesn't have a default value
12:43:03,778 ERROR [AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:114)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)
at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:244)
at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1141)
at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:58)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:171)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:504)
at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:101)
at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:269)
at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:89)
at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:177)
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1423)
at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:137)
at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:75)
at org.jboss.tm.usertx.client.ServerVMClientUserTransaction.commit(ServerVMClientUserTransaction.java:162)
at org.jboss.seam.transaction.UTTransaction.commit(UTTransaction.java:52)
at org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:613)
at org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:604)
at org.jboss.seam.jsf.SeamPhaseListener.handleTransactionsAfterPhase(SeamPhaseListener.java:345)
at org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:245)
at org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:196)
at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:175)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
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:235)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.BatchUpdateException: Field 'm_QuestoesSecundarias_id' doesn't have a default value
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2020)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1451)
at com.mysql.jdbc.jdbc2.optional.StatementWrapper.executeBatch(StatementWrapper.java:722)
at org.jboss.resource.adapter.jdbc.WrappedStatement.executeBatch(WrappedStatement.java:774)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 74 more
12:43:03,786 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator_2] TwoPhaseCoordinator.beforeCompletion - failed for com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple@19b8546
javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
Estou procurando trabalhar em um esquema de herança. Embora as classes filhas não tenham atributos extras, essa relação é para expressar algo conceitual definido anteriormente. Desta forma, existem algumas restrições quando a modificação da hierarquia das classes.
Eis as classes envolvidas.
A classe Objetivo de Pesquisa contem duas listas de Questões de Pesquisa, uma para questões Primárias e outra para questões secundárias@Entity
@Name("objetivoPesquisa")
@AutoCreate
public class ObjetivoPesquisa implements Serializable {
/**
*
*/
private static final long serialVersionUID = -8815814034856059355L;
private Long id;
private String analisar;
private String comProposito;
private String comRespeito;
private String noContexto;
private Problema m_Problema;
private ObjetoEstudo m_ObjetoEstudo;
private List<QuestaoPesquisa> m_QuestoesPrimarias;
private List<QuestaoPesquisa> m_QuestoesSecundarias;
@Id @GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Lob
public String getAnalisar() {
return analisar;
}
public void setAnalisar(String analisar) {
this.analisar = analisar;
}
@Lob
public String getComProposito() {
return comProposito;
}
public void setComProposito(String comProposito) {
this.comProposito = comProposito;
}
@Lob
public String getComRespeito() {
return comRespeito;
}
public void setComRespeito(String comRespeito) {
this.comRespeito = comRespeito;
}
@Lob
public String getNoContexto() {
return noContexto;
}
public void setNoContexto(String noContexto) {
this.noContexto = noContexto;
}
@OneToOne(cascade=CascadeType.ALL)
public Problema getM_Problema() {
return m_Problema;
}
public void setM_Problema(Problema mProblema) {
m_Problema = mProblema;
}
@OneToOne(cascade=CascadeType.ALL)
public ObjetoEstudo getM_ObjetoEstudo() {
return m_ObjetoEstudo;
}
public void setM_ObjetoEstudo(ObjetoEstudo mObjetoEstudo) {
m_ObjetoEstudo = mObjetoEstudo;
}
@OneToMany(cascade=CascadeType.ALL)
public List<QuestaoPesquisa> getM_QuestoesPrimarias() {
return m_QuestoesPrimarias;
}
public void setM_QuestoesPrimarias(List<QuestaoPesquisa> mQuestoesPrimarias) {
m_QuestoesPrimarias = mQuestoesPrimarias;
}
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
public List<QuestaoPesquisa> getM_QuestoesSecundarias() {
return m_QuestoesSecundarias;
}
public void setM_QuestoesSecundarias(List<QuestaoPesquisa> mQuestoesSecundarias) {
m_QuestoesSecundarias = mQuestoesSecundarias;
}
public ObjetivoPesquisa(){
}
}
@Name("questaoPesquisa")
@AutoCreate
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class QuestaoPesquisa implements Serializable{
/**
*
*/
private static final long serialVersionUID = -2691100576912584069L;
private Long id;
private String descricao;
private List<Controle> m_Controle;
private StringBusca m_StringBusca;
//private StringBusca m_StringBuscaAdaptada;
private FocoQuestao m_FocoQuestao;
private Hipotese m_HipoteseNula;
private Hipotese m_HipoteseAlternativa;
@Id @GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Lob
@Column(nullable=true)
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
@OneToMany(cascade=CascadeType.ALL)
@Basic(optional=true)
public List<Controle> getM_Controle() {
return m_Controle;
}
public void setM_Controle(List<Controle> mControle) {
m_Controle = mControle;
}
@OneToOne(cascade=CascadeType.ALL)
public StringBusca getM_StringBusca() {
return m_StringBusca;
}
public void setM_StringBusca(StringBusca mStringBusca) {
m_StringBusca = mStringBusca;
}
/*
public FocoQuestao getM_FocoQuestao() {
return m_FocoQuestao;
}
public void setM_FocoQuestao(FocoQuestao mFocoQuestao) {
m_FocoQuestao = mFocoQuestao;
}*/
/*@OneToOne(cascade=CascadeType.ALL)
public StringBusca getM_StringBuscaAdaptada() {
return m_StringBuscaAdaptada;
}
public void setM_StringBuscaAdaptada(StringBusca mStringBuscaAdaptada) {
m_StringBuscaAdaptada = mStringBuscaAdaptada;
}*/
@OneToOne(cascade=CascadeType.ALL)
@Basic(optional=true)
public Hipotese getM_HipoteseNula() {
return m_HipoteseNula;
}
public void setM_HipoteseNula(Hipotese mHipoteseNula) {
m_HipoteseNula = mHipoteseNula;
}
@OneToOne(cascade=CascadeType.ALL)
@Basic(optional=true)
public Hipotese getM_HipoteseAlternativa() {
return m_HipoteseAlternativa;
}
public void setM_HipoteseAlternativa(Hipotese mHipoteseAlternativa) {
m_HipoteseAlternativa = mHipoteseAlternativa;
}
public String sugereTermosComBaseArtigosControle() {
ModeloTermosRelevantes modeloTermosRelevantes = new ModeloTermosRelevantes();
StringBuilder stringBuilder = new StringBuilder();
List<Controle> artigosControle = this.getM_Controle();
if (artigosControle != null) {
for (Controle controle: this.m_Controle) {
stringBuilder.append(controle.getConteudoAbstract() + "\n");
}
String termosRelevantes = modeloTermosRelevantes.sugereTermos(stringBuilder.toString());
}
//TODO: Trocar retorno do método!
return "Sugestão de Termos";
}
public boolean contemArtigosControle() {
return this.getM_Controle() != null && this.getM_Controle().size() > 0;
}
public QuestaoPesquisa(){
}
@Override
public boolean equals(Object o) {
QuestaoPesquisa q = (QuestaoPesquisa) o;
return this.descricao.equals(q.getDescricao());
}
}
@Name("questaoSecundaria")
@AutoCreate
@Entity
public class QuestaoSecundaria extends QuestaoPesquisa {
/**
*
*/
private static final long serialVersionUID = 1548642214127387416L;
public QuestaoSecundaria(){
}
}
Caused by: java.sql.BatchUpdateException: Field 'm_QuestoesSecundarias_id' doesn't have a default value
Valeu!!
