[Resolvido]Hibernate "not-null property references a null or transient value:"

Boa tarde galera to com um problema meio inusitado.
Estou tentando gravar um objeto que tem um relacionamento, detalhe no banco ele tambem nao esta como not null

@JoinColumn(name = "COD_MUN", referencedColumnName = "id", nullable = true)
@ManyToOne(optional = false)

ao tentar inserir um objeto no banco de dados esta dando o seguinte erro

javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.atlantica.atlanticaSped.orm.entity.Registro0100.municipioIBGE
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1179)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1112)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1118)
	at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:635)
	at br.com.atlantica.atlanticaSped.orm.daoimpl.DAOImpl.merge(DAOImpl.java:37)
	at br.com.atlantica.atlanticaSped.orm.daoimpl.DAOImpl.save(DAOImpl.java:65)
	at br.com.atlantica.atlanticaSped.orm.daoimpl.Registro0100DAOImpl.save(Registro0100DAOImpl.java:23)
	at br.com.atlantica.atlanticaSped.service.Registro0100Service.salvar(Registro0100Service.java:60)
	at br.com.atlantica.atlanticaSped.service.Registro0100Service.salvar(Registro0100Service.java:1)
	at br.com.atlantica.atlanticaSped.util.ViewUtilities.salvarPadrao(ViewUtilities.java:77)
	at br.com.atlantica.atlanticaSped.bean.BeanPadrao.salvar(BeanPadrao.java:45)
	at br.com.atlantica.swinggoodies.components.template.SGBotoesCadastro$3.actionPerformed(SGBotoesCadastro.java:129)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
	at java.awt.Component.processMouseEvent(Component.java:6038)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
	at java.awt.Component.processEvent(Component.java:5803)
	at java.awt.Container.processEvent(Container.java:2058)
	at java.awt.Component.dispatchEventImpl(Component.java:4410)
	at java.awt.Container.dispatchEventImpl(Container.java:2116)
	at java.awt.Component.dispatchEvent(Component.java:4240)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
	at java.awt.Container.dispatchEventImpl(Container.java:2102)
	at java.awt.Window.dispatchEventImpl(Window.java:2429)
	at java.awt.Component.dispatchEvent(Component.java:4240)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.atlantica.atlanticaSped.orm.entity.Registro0100.municipioIBGE
	at org.hibernate.engine.Nullability.checkNullability(Nullability.java:101)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:313)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
	at org.hibernate.ejb.event.EJB3MergeEventListener.saveWithGeneratedId(EJB3MergeEventListener.java:62)
	at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:313)
	at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:282)
	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:237)
	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:84)
	at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:859)
	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:843)
	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:847)
	at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:626)
	... 34 more
org.hibernate.AssertionFailure: null id in br.com.atlantica.atlanticaSped.orm.entity.Registro0100 entry (don't flush the Session after an exception occurs)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:82)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:190)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:147)
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
	at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:58)
	at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1175)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1251)
	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
	at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:236)
	at br.com.atlantica.atlanticaSped.orm.daoimpl.Registro0100DAOImpl.findByIDRegistro0001(Registro0100DAOImpl.java:17)
	at br.com.atlantica.atlanticaSped.service.Registro0100Service.findByIDRegistro0001(Registro0100Service.java:34)
	at br.com.atlantica.atlanticaSped.bean.Registro0100Bean.atualizaLista(Registro0100Bean.java:194)
	at br.com.atlantica.atlanticaSped.util.ViewUtilities.atualizaObjetoSecao(ViewUtilities.java:61)
	at br.com.atlantica.atlanticaSped.util.ViewUtilities.salvarPadrao(ViewUtilities.java:78)
	at br.com.atlantica.atlanticaSped.bean.BeanPadrao.salvar(BeanPadrao.java:45)
	at br.com.atlantica.swinggoodies.components.template.SGBotoesCadastro$3.actionPerformed(SGBotoesCadastro.java:129)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
	at java.awt.Component.processMouseEvent(Component.java:6038)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
	at java.awt.Component.processEvent(Component.java:5803)
	at java.awt.Container.processEvent(Container.java:2058)
	at java.awt.Component.dispatchEventImpl(Component.java:4410)
	at java.awt.Container.dispatchEventImpl(Container.java:2116)
	at java.awt.Component.dispatchEvent(Component.java:4240)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
	at java.awt.Container.dispatchEventImpl(Container.java:2102)
	at java.awt.Window.dispatchEventImpl(Window.java:2429)
	at java.awt.Component.dispatchEvent(Component.java:4240)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
ERROR [AWT-EventQueue-0] (AssertionFailure.java:45) - an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
org.hibernate.AssertionFailure: null id in br.com.atlantica.atlanticaSped.orm.entity.Registro0100 entry (don't flush the Session after an exception occurs)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:82)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:190)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:147)
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
	at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:58)
	at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1175)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1251)
	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
	at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:236)
	at br.com.atlantica.atlanticaSped.orm.daoimpl.Registro0100DAOImpl.findByIDRegistro0001(Registro0100DAOImpl.java:17)
	at br.com.atlantica.atlanticaSped.service.Registro0100Service.findByIDRegistro0001(Registro0100Service.java:34)
	at br.com.atlantica.atlanticaSped.bean.Registro0100Bean.atualizaLista(Registro0100Bean.java:194)
	at br.com.atlantica.atlanticaSped.util.ViewUtilities.atualizaObjetoSecao(ViewUtilities.java:61)
	at br.com.atlantica.atlanticaSped.util.ViewUtilities.salvarPadrao(ViewUtilities.java:78)
	at br.com.atlantica.atlanticaSped.bean.BeanPadrao.salvar(BeanPadrao.java:45)
	at br.com.atlantica.swinggoodies.components.template.SGBotoesCadastro$3.actionPerformed(SGBotoesCadastro.java:129)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
	at java.awt.Component.processMouseEvent(Component.java:6038)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
	at java.awt.Component.processEvent(Component.java:5803)
	at java.awt.Container.processEvent(Container.java:2058)
	at java.awt.Component.dispatchEventImpl(Component.java:4410)
	at java.awt.Container.dispatchEventImpl(Container.java:2116)
	at java.awt.Component.dispatchEvent(Component.java:4240)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
	at java.awt.Container.dispatchEventImpl(Container.java:2102)
	at java.awt.Window.dispatchEventImpl(Window.java:2429)
	at java.awt.Component.dispatchEvent(Component.java:4240)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Segue meu pojo abaixo

package br.com.atlantica.atlanticaSped.orm.entity;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;


@Entity
@Table(name = "Registro0100", catalog = "validadorSped", schema = "", uniqueConstraints = {
		@UniqueConstraint(columnNames = {"id", "COD_MUN"}), @UniqueConstraint(columnNames = {"idRegistro0001"})})
@NamedQueries( {
		@NamedQuery(name = "Registro0100.findAll", query = "SELECT r FROM Registro0100 r"),
		@NamedQuery(name = "Registro0100.findById", query = "SELECT r FROM Registro0100 r WHERE r.id = :id"),
		@NamedQuery(name = "Registro0100.findByIDRegistro0001", query = "SELECT r FROM Registro0100 r WHERE r.registro0001.id = :id"),
		@NamedQuery(name = "Registro0100.findByReg", query = "SELECT r FROM Registro0100 r WHERE r.reg = :reg"),
		@NamedQuery(name = "Registro0100.findByNome", query = "SELECT r FROM Registro0100 r WHERE r.nome = :nome"),
		@NamedQuery(name = "Registro0100.findByCpf", query = "SELECT r FROM Registro0100 r WHERE r.cpf = :cpf"),
		@NamedQuery(name = "Registro0100.findByCrc", query = "SELECT r FROM Registro0100 r WHERE r.crc = :crc"),
		@NamedQuery(name = "Registro0100.findByCnpj", query = "SELECT r FROM Registro0100 r WHERE r.cnpj = :cnpj"),
		@NamedQuery(name = "Registro0100.findByCep", query = "SELECT r FROM Registro0100 r WHERE r.cep = :cep"),
		@NamedQuery(name = "Registro0100.findByEnd1", query = "SELECT r FROM Registro0100 r WHERE r.end1 = :end1"),
		@NamedQuery(name = "Registro0100.findByNum", query = "SELECT r FROM Registro0100 r WHERE r.num = :num"),
		@NamedQuery(name = "Registro0100.findByCompl", query = "SELECT r FROM Registro0100 r WHERE r.compl = :compl"),
		@NamedQuery(name = "Registro0100.findByBairro", query = "SELECT r FROM Registro0100 r WHERE r.bairro = :bairro"),
		@NamedQuery(name = "Registro0100.findByFone", query = "SELECT r FROM Registro0100 r WHERE r.fone = :fone"),
		@NamedQuery(name = "Registro0100.findByFax", query = "SELECT r FROM Registro0100 r WHERE r.fax = :fax"),
		@NamedQuery(name = "Registro0100.findByEmail", query = "SELECT r FROM Registro0100 r WHERE r.email = :email")})
public class Registro0100 implements Serializable
{
	private static final long	serialVersionUID	= 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Basic(optional = false)
	@Column(name = "id", nullable = false)
	private Integer				id;
	@Column(name = "REG", length = 4)
	private String					reg					= "0100";
	@Column(name = "NOME", length = 100)
	private String					nome;
	@Column(name = "CPF", length = 11)
	private String					cpf;
	@Column(name = "CRC", length = 15)
	private String					crc;
	@Column(name = "CNPJ", length = 14)
	private String					cnpj;
	@Column(name = "CEP", length = 8)
	private String					cep;
	@Column(name = "END1", length = 60)
	private String					end1;
	@Column(name = "NUM", length = 10)
	private String					num;
	@Column(name = "COMPL", length = 60)
	private String					compl;
	@Column(name = "BAIRRO", length = 60)
	private String					bairro;
	@Column(name = "FONE", length = 10)
	private String					fone;
	@Column(name = "FAX", length = 10)
	private String					fax;
	@Column(name = "EMAIL", length = 255)
	private String					email;
	@JoinColumn(name = "idRegistro0001", referencedColumnName = "id", nullable = false)
	@OneToOne(optional = false, fetch = FetchType.LAZY)
	private Registro0001			registro0001;
	@JoinColumn(name = "COD_MUN", referencedColumnName = "id", nullable = true)
	@ManyToOne(optional = false)
	private MunicipioIBGE		municipioIBGE;

	public Registro0100()
	{
	}

	public Registro0100(Integer id)
	{
		this.id = id;
	}

	public Integer getId()
	{
		return id;
	}

	public void setId(Integer id)
	{
		this.id = id;
	}

	public String getReg()
	{
		return reg;
	}

	public void setReg(String reg)
	{
		this.reg = reg;
	}

	public String getNome()
	{
		return nome;
	}

	public void setNome(String nome)
	{
		this.nome = nome;
	}

	public String getCpf()
	{
		return cpf;
	}

	public void setCpf(String cpf)
	{
		this.cpf = cpf;
	}

	public String getCrc()
	{
		return crc;
	}

	public void setCrc(String crc)
	{
		this.crc = crc;
	}

	public String getCnpj()
	{
		return cnpj;
	}

	public void setCnpj(String cnpj)
	{
		this.cnpj = cnpj;
	}

	public String getCep()
	{
		return cep;
	}

	public void setCep(String cep)
	{
		this.cep = cep;
	}

	public String getEnd1()
	{
		return end1;
	}

	public void setEnd1(String end1)
	{
		this.end1 = end1;
	}

	public String getNum()
	{
		return num;
	}

	public void setNum(String num)
	{
		this.num = num;
	}

	public String getCompl()
	{
		return compl;
	}

	public void setCompl(String compl)
	{
		this.compl = compl;
	}

	public String getBairro()
	{
		return bairro;
	}

	public void setBairro(String bairro)
	{
		this.bairro = bairro;
	}

	public String getFone()
	{
		return fone;
	}

	public void setFone(String fone)
	{
		this.fone = fone;
	}

	public String getFax()
	{
		return fax;
	}

	public void setFax(String fax)
	{
		this.fax = fax;
	}

	public String getEmail()
	{
		return email;
	}

	public void setEmail(String email)
	{
		this.email = email;
	}

	public Registro0001 getRegistro0001()
	{
		return registro0001;
	}

	public void setRegistro0001(Registro0001 registro0001)
	{
		this.registro0001 = registro0001;
	}

	public MunicipioIBGE getMunicipioIBGE()
	{
		return municipioIBGE;
	}

	public void setMunicipioIBGE(MunicipioIBGE municipioIBGE)
	{
		this.municipioIBGE = municipioIBGE;
	}

	@Override
	public int hashCode()
	{
		int hash = 0;
		hash += (id != null ? id.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 Registro0100))
		{
			return false;
		}
		Registro0100 other = (Registro0100) object;
		if((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id)))
		{
			return false;
		}
		return true;
	}

	@Override
	public String toString()
	{
		return "br.com.atlantica.atlanticaSped.orm.entity.Registro0100[id=" + id + "]";
	}
}

Se alguem souber o que pode ser isso eu agradeço

Já experimentou colocar @ManyToOne(optional = true)?
Se entendi bem, você aceita null, mas diz a que relação não é opcional com (optional = false). Uma relação opcional é aquela que suporta null.

Abraço

1 curtida

Valeu Flavio era isso mesmo.