研究员,
我在使用merge()方法存储hibernate时遇到了问题。让我看看你是否可以帮助我。话虽如此,我会在下面发布我的代码。
以下是涉及的表defs(由于只是常规数据,因此省略了一些列):
TABLE proposta (
idProposta INT(11) NOT NULL AUTO_INCREMENT,
idBeneficio INT(11) NOT NULL,
idTabela INT NULL,
idOperacao INT NOT NULL,
...
TABLE conta_bancaria (
idContaBancaria INT NOT NULL AUTO_INCREMENT,
idBanco INT NOT NULL,
idProposta INT NOT NULL,
idBeneficio INT NOT NULL,
...
TABLE banco (
idBanco INT(11) NOT NULL AUTO_INCREMENT,
nmNomeBanco VARCHAR(60) NULL DEFAULT NULL,
cdBanco VARCHAR(5) NULL DEFAULT NULL,
nmNomeCompleto VARCHAR(90) NULL,
dsSite VARCHAR(256) NULL,
blAtivo INT NULL DEFAULT NULL,
PRIMARY KEY (`idBanco`)
@Entity
@Table(name="Proposta")
public class Proposta extends GenericEntity<Proposta>{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idProposta")
private Integer idProposta;
@OneToOne(cascade = CascadeType.ALL, mappedBy="proposta", fetch = FetchType.LAZY, optional=true)
@JoinColumn(name = "idProposta", referencedColumnName="idProposta")
@Basic(optional=true)
private ContaBancaria contaRecebimento;
@ManyToOne(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@JoinColumn(name = "idBeneficio", referencedColumnName="idBeneficio")
private Beneficio beneficio;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "idOperacao", referencedColumnName="idOperacao")
private Operacao operacao;
...
@Entity
@Table(name="Conta_Bancaria")
public class ContaBancaria extends GenericEntity<ContaBancaria>{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idContaBancaria")
private Integer idContaBancaria;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "idBanco")
private Banco banco;
@OneToOne
@PrimaryKeyJoinColumn
private Proposta proposta;
@OneToOne
@PrimaryKeyJoinColumn
private Beneficio beneficio;
...
@ManagedBean("propostaBean")
@ViewScoped
public class PropostaBean extends GenericController {
@Inject
private PropostaService propostaService;
/** Aba Cadastro Proposta **/
private Pessoa pessoa;
private Beneficio beneficio;
private Proposta proposta;
private List<Banco> bancos;
private Integer idBancoSelected;
private Integer idOperacaoSelected;
private List<Operacao> operacoes;
public PropostaBean() {
refreshBean();
}
@PostConstruct
private void refreshBean(){
this.pessoa = new Pessoa();
this.beneficio = new Beneficio();
this.proposta = new Proposta();
this.filtroBenProp = new FiltroBeneficioProposta();
this.resultadoBuscaBeneficio = new ArrayList<PessoaBeneficioDTO>();
this.bancos = new ArrayList<Banco>();
this.operacoes = new ArrayList<Operacao>();
}
public String salvarProposta(){
String method = "salvarProposta";
long startTime = startMethod(method);
Banco banco = null;
for (Banco b : bancos) {
if(b.getIdBanco() == idBancoSelected){
banco = b;
}
}
Operacao operacao = null;
for (Operacao op : operacoes) {
if(op.getIdOperacao() == idOperacaoSelected){
operacao = op;
this.proposta.setOperacao(operacao);
}
}
System.out.println("Operacao = ["+operacao+"], idOperacaoSelected ["+idOperacaoSelected+"]");
System.out.println("Conta Bancaria = ["+proposta.getContaRecebimento()+"]");
this.proposta.setBeneficio(beneficio);
try {
if(proposta.getContaRecebimento().getAgencia() == null){
proposta.setContaRecebimento(null);
}
this.proposta = propostaService.salvarProposta(proposta);
proposta.setContaRecebimento(new ContaBancaria());
FacesUIHelper.addSucessMessage("Proposta no ["+proposta.getNpi()+"] cadastrada com sucesso");
} catch (BusinessException e) {
e.printStackTrace();
FacesUIHelper.addErrorMessage(e.getMessage());
}
leaveMethod(startTime, method);
return "/views/cadastro/cadastroProposta";
}
}
@Service("propostaService")
@Transactional
public class PropostaServiceImpl extends GenericServiceImpl<Proposta> implements Serializable, PropostaService {
public static final String USUARIO_DEFAULT = "SYSTEM";
@Inject
private PropostaDAO<Proposta> propostaDAO;
@Inject
private OperacaoDAO<Operacao> operacaoDAO;
@Inject
private BeneficioDAO<Beneficio> beneficioDAO;
@Inject
private TipoOperacaoDAO<TipoOperacao> tipoOperacaoDAO;
@Inject
private ParametroSistemaDAO<ParametroSistema> parametroSistemaDAO;
@Override
public Proposta salvarProposta(Proposta p) throws BusinessException {
String method = "salvarProposta";
long startTime = startMethod(method);
Proposta prop = null;
if(p.getIdProposta() == null){
try {
Integer npi = parametroSistemaDAO.getSequenceValue("SEQ_NPI");
p.setNpi(npi);
Date dt = new Date(System.currentTimeMillis());
p.setDataProposta(dt);
p.setDataStatus(dt);
p.setStatus(Proposta.CADASTRADA);
p.setUsuarioResponsavel(USUARIO_DEFAULT);
prop = propostaDAO.saveOrUpdate(p);
} catch (DAOException e) {
throw new BusinessException(e);
}
}else {
prop = propostaDAO.saveOrUpdate(p);
}
leaveMethod(startTime, method);
return prop;
}
}
@Repository("genericDao")
public abstract class GenericDAOImpl<T> implements GenericDAO<T> {
protected static Logger logger;
@PersistenceContext
protected EntityManager entityManager;
protected String className;
private Class< T > type;
public GenericDAOImpl() {
Type t = getClass().getGenericSuperclass();
ParameterizedType pt = (ParameterizedType) t;
type = (Class) pt.getActualTypeArguments()[0];
this.logger = LoggerFactory.getLogger(getClass());
this.className = this.getClass().getName();
}
@Transactional
public T save(T entity) throws DAOException {
entityManager.persist(entity);
return entity;
}
@Transactional
public T update(T entity) {
entityManager.merge(entity);
return entity;
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public T saveOrUpdate(T entity){
entityManager.merge(entity);
return entity;
}
@Transactional
public Collection<T> saveOrUpdateAll(Collection<T> entities) {
for(T element: entities) {
entityManager.merge(element);
}
return entities;
}
@Transactional
public void delete(T entity) {
entityManager.remove(entity);
}
@Transactional
public void deleteAll(List<T> list) {
for(T element: list) {
entityManager.remove(element);
}
}
@SuppressWarnings("unchecked")
public List<T> listAll() {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<T> c = cb.createQuery(type);
Root<T> genericObject = c.from(type);
TypedQuery<T> typedQuery = entityManager.createQuery(c);
List<T> resultList = (List<T>) typedQuery.getResultList();
return resultList;
}
public T findById(long id) {
T result =(T) entityManager.find(type, id);
return result;
}
public T findById(Serializable id) {
T result =(T) entityManager.find(type, id);
return result;
}
public EntityManager getEntityManager() {
return entityManager;
}
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
}
当我为proposta实例(尚未创建)调用merge时,即使我标记(或至少它应该被标记)Proposta.ContaBancaria作为可选关系,hibernate也尝试插入它。这是hibernate日志:
04:47:33,410 INFO [stdout] Hibernate:
04:47:33,410 INFO [stdout] insert
04:47:33,411 INFO [stdout] into
04:47:33,411 INFO [stdout] Proposta
04:47:33,411 INFO [stdout] (idBeneficio, dtEnvioFisico, dtPagamento, dtPagamentoComissao, dtProposta, dtStatus, cdDocExterno, tpMeioPagamento, cdNpi, nrLinhasAtual, nrNumParcelas, idOperacao, status, nmUsuario, vlBrutoConsiderado, vlDescontos, vlLiquidoLiberado, vlLiquidoBeneficio, vlMargemLivre, vlValorParcela)
04:47:33,413 INFO [stdout] values
04:47:33,413 INFO [stdout] (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
04:47:33,502 INFO [stdout] Hibernate:
04:47:33,502 INFO [stdout] insert
04:47:33,502 INFO [stdout] into
04:47:33,503 INFO [stdout] Conta_Bancaria
04:47:33,503 INFO [stdout] (nrAgencia, blAtivo, idBanco, nrDigitoAgencia, nrDigitoConta, nrConta, blPoupanca, nrTipo)
04:47:33,504 INFO [stdout] values
04:47:33,504 INFO [stdout] (?, ?, ?, ?, ?, ?, ?, ?)
然后我收到以下错误:
04:47:33,552 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] SQL Error: 1048, SQLState: 23000
04:47:33,553 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] Column 'idBanco' cannot be null
04:47:34,352 WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] #{propostaBean.salvarProposta}: org.springframework.dao.DataIntegrityViolationException: Column 'idBanco' cannot be null; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: Column 'idBanco' cannot be null: javax.faces.FacesException: #{propostaBean.salvarProposta}: org.springframework.dao.DataIntegrityViolationException: Column 'idBanco' cannot be null; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: Column 'idBanco' cannot be null
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
at org.primefaces.application.DialogActionListener.processAction(DialogActionListener.java:45) [primefaces-4.0.jar:4.0]
at javax.faces.component.UICommand.broadcast(UICommand.java:315) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIData.broadcast(UIData.java:1093) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:98) [primefaces-4.0.jar:4.0]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_21]
Caused by: javax.faces.el.EvaluationException: org.springframework.dao.DataIntegrityViolationException: Column 'idBanco' cannot be null; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: Column 'idBanco' cannot be null
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) [jsf-impl-2.1.7-jbossorg-2.jar:]
... 26 more
Caused by: org.springframework.dao.DataIntegrityViolationException: Column 'idBanco' cannot be null; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: Column 'idBanco' cannot be null
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:188) [spring-orm-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:154) [spring-orm-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417) [spring-orm-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59) [spring-tx-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) [spring-tx-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147) [spring-tx-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98) [spring-tx-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262) [spring-tx-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) [spring-tx-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) [spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at com.sun.proxy.$Proxy110.saveOrUpdate(Unknown Source)
at br.com.centralemprestimos.sisat.service.PropostaServiceImpl.salvarProposta(PropostaServiceImpl.java:65) [classes:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_21]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_21]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_21]
at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_21]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) [spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) [spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) [spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) [spring-tx-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98) [spring-tx-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262) [spring-tx-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) [spring-tx-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) [spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at com.sun.proxy.$Proxy113.salvarProposta(Unknown Source)
at br.com.centralemprestimos.sisat.mbean.PropostaBean.salvarProposta(PropostaBean.java:184) [classes:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_21]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_21]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_21]
at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_21]
at org.apache.el.parser.AstValue.invoke(AstValue.java:262) [jbossweb-7.0.13.Final.jar:]
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) [jbossweb-7.0.13.Final.jar:]
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
... 27 more
Caused by: org.hibernate.exception.ConstraintViolationException: Column 'idBanco' cannot be null
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:74) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at com.sun.proxy.$Proxy78.executeUpdate(Unknown Source)
at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:96) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:55) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2757) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3268) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:78) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:272) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:304) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:195) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:128) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.ejb.event.EJB3MergeEventListener.saveWithGeneratedId(EJB3MergeEventListener.java:71) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.DefaultMergeEventListener.saveTransientEntity(DefaultMergeEventListener.java:422) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:342) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:304) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:259) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:790) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:774) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.spi.CascadingAction$6.cascade(CascadingAction.java:288) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:462) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:395) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:304) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:259) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:86) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:781) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:766) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:770) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:867) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_21]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_21]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_21]
at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_21]
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:257) [spring-orm-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at com.sun.proxy.$Proxy102.merge(Unknown Source)
at br.com.mobinn.fmwk.persistence.GenericDAOImpl.saveOrUpdate(GenericDAOImpl.java:60) [classes:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_21]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_21]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_21]
at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_21]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) [spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) [spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) [spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) [spring-tx-4.0.0.RELEASE.jar:4.0.0.RELEASE]
... 59 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'idBanco' cannot be null
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.7.0_21]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) [rt.jar:1.7.0_21]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [rt.jar:1.7.0_21]
at java.lang.reflect.Constructor.newInstance(Constructor.java:525) [rt.jar:1.7.0_21]
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) [mysql-connector-java-5.1.26.jar:]
at com.mysql.jdbc.Util.getInstance(Util.java:386) [mysql-connector-java-5.1.26.jar:]
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1041) [mysql-connector-java-5.1.26.jar:]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190) [mysql-connector-java-5.1.26.jar:]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4122) [mysql-connector-java-5.1.26.jar:]
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570) [mysql-connector-java-5.1.26.jar:]
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731) [mysql-connector-java-5.1.26.jar:]
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2818) [mysql-connector-java-5.1.26.jar:]
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2157) [mysql-connector-java-5.1.26.jar:]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2460) [mysql-connector-java-5.1.26.jar:]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2377) [mysql-connector-java-5.1.26.jar:]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2361) [mysql-connector-java-5.1.26.jar:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_21]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_21]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_21]
at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_21]
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
... 106 more
但它不应该插入ContaBancaria,因为它是空的和可选的。它不是null,因为它在视图中呈现,但所有字段都是空的,因为此打印显示:
04:47:33,145 INFO [stdout] Conta Bancaria = [ContaBancaria [idContaBancaria=null, agencia=, digitoAgencia=null, numeroConta=null, digitoConta=, tipo=null, poupanca=0, ativo=null]]
是否有任何映射错误?我做错了什么?
提前致谢。
答案 0 :(得分:0)
在映射中,您使用值Cascade.All指定了属性级联,这意味着在插入/更新/删除父实体Proposta时,必须以级联方式插入/更新/删除ContaBancaria。设置为“true”的可选属性意味着在插入或更新时Proposta中的ContaBancaria字段可以为null,但鉴于在您的情况下ContaBancaria不为null(但为空),hibernate理解有一个对象(非null)要插入在级联。