Iniciando no Hibernate  XML
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Autor Mensagem
dayserivera
HelloWorld

Membro desde: 19/04/2005 09:53:22
Mensagens: 14
Offline

Pessoal, estou com problema ao rodar o código à seguir:

package hibernate;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToOne;
import javax.persistence.Table;


@Entity
@Table(name = "USER")
public class User implements Serializable {
@Id
@GeneratedValue
@Column(name = "USER_ID")
private Long id;
public Long getId() {
return id;
}

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

@OneToOne(optional=true, cascade = CascadeType.ALL)
@JoinTable(name="UserAddress", joinColumns={
@JoinColumn(name="USER_ID", unique=true)
}, inverseJoinColumns = {
@JoinColumn(name="addressId")
})
private Address shippingAddress;

public Address getShippingAddress() {
return shippingAddress;
}

public void setShippingAddress(Address shippingAddress) {
this.shippingAddress = shippingAddress;
}
}


package hibernate;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name = "ADDRESS")

public class Address implements Serializable {
@Id
@GeneratedValue
@Column(name = "ADDRESS_ID")
private Long id;
private String street;
private String city;
private String zipcode;
@OneToOne(optional=true, mappedBy="shippingAddress")
private User user;

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public Long getId() {
return id;
}

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

public String getStreet() {
return street;
}

public void setStreet(String street) {
this.street = street;
}

public String getCity() {
return city;
}

public void setCity(String city) {
this.city = city;
}

public String getZipcode() {
return zipcode;
}

public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
}

package hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

public class Example1 {
public static void main(String[] args) throws Exception {
/** Getting the Session Factory and session */
SessionFactory session = HibernateUtil.getSessionFactory();
Session sess = session.getCurrentSession();
/** Starting the Transaction */
Transaction tx = sess.beginTransaction();
/** Creating Pojo */
User newUser = new User();
//newUser.setId(1L);
Address shippingAddress = new Address();
newUser.setShippingAddress(shippingAddress);
shippingAddress.setUser(newUser);
/** Saving POJO */
sess.saveOrUpdate(newUser);
/** Commiting the changes */

tx.commit();
System.out.println("Record Inserted");
/** Closing Session */



session.close();
}
}

O erro lançado é:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.hibernate.PropertyValueException: not-null property references a null or transient value: hibernate.Address.user
at org.hibernate.engine.Nullability.checkNullability(Nullability.java:95)
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.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:527)
at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:241)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:292)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:240)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:193)
at org.hibernate.engine.Cascade.cascade(Cascade.java:154)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:454)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:28
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:527)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:523)
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.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:342)
at $Proxy11.saveOrUpdate(Unknown Source)
at hibernate.Example1.main(Example1.java:21)


ALGUÉM PODE ME AJUDAR!!!!!
robson.simonassi
JavaBaby
[Avatar]

Membro desde: 26/09/2007 10:19:18
Mensagens: 76
Offline

Olá bom dia,

Vc deve estar passando algum objeto nulo, e que no banco de dados deve ser NOTNULL dá uma olhadinha!!
Faça um debug e veja se não existe algum objeto nulo na classe 'Andress'.

E configura o 'property' do log4j para não dar mais esta mensagem:

og4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.



Boa sorte!!!
dayserivera
HelloWorld

Membro desde: 19/04/2005 09:53:22
Mensagens: 14
Offline

Acho que não tem nada nulo, como pode ser visto aqui:

User newUser = new User();
Address shippingAddress = new Address();
newUser.setShippingAddress(shippingAddress);
shippingAddress.setUser(newUser);
sess.saveOrUpdate(newUser);
g4j
GUJ Ranger
[Avatar]

Membro desde: 02/05/2007 14:32:03
Mensagens: 817
Localização: Curitiba
Offline


User newUser = new User();


não basta passar somente a instância, tem que setar a chave primária (algo como user.setCodigo(codigo)) na classe User...

Gerson Luiz Chagas

SCJP 5.0
SCWCD 5.0

robson.simonassi
JavaBaby
[Avatar]

Membro desde: 26/09/2007 10:19:18
Mensagens: 76
Offline

Tentar deixar o Objeto Estanciado dentro da classe ENTiTY



private Address shippingAddress = new Address();

public Address getShippingAddress() {
return shippingAddress;
dayserivera
HelloWorld

Membro desde: 19/04/2005 09:53:22
Mensagens: 14
Offline

Vou tentar, mas, acho que não, pois na classe User foi definido o padrão de chave-primária com a anotação:

@Id
@GeneratedValue
@Column(name = "USER_ID")

que pode default é AUTO. Ainda assim é preciso eu definir previamente a chave? Eu acho que não...
g4j
GUJ Ranger
[Avatar]

Membro desde: 02/05/2007 14:32:03
Mensagens: 817
Localização: Curitiba
Offline

dayserivera wrote:Vou tentar, mas, acho que não, pois na classe User foi definido o padrão de chave-primária com a anotação:

@Id
@GeneratedValue
@Column(name = "USER_ID")

que pode default é AUTO. Ainda assim é preciso eu definir previamente a chave? Eu acho que não...


ok, é um novo usuário.

o mesmo vale para classe Address, tem que popular a pk

Gerson Luiz Chagas

SCJP 5.0
SCWCD 5.0

 
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Ir para:   
Powered by JForum 2.1.8 © JForum Team