| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/04/2011 01:07:18
|
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!!!!!
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/04/2011 07:45:15
|
robson.simonassi
JavaBaby
![[Avatar]](/images/avatar/f72e0b9fc085734d1bb6932d3f5b48fd.jpg)
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!!!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/04/2011 10:23:45
|
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);
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/04/2011 10:28:14
|
g4j
GUJ Ranger
![[Avatar]](/images/avatar/bea3c20edb84a0dd83a99a9a7274bc67.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/04/2011 10:33:08
|
robson.simonassi
JavaBaby
![[Avatar]](/images/avatar/f72e0b9fc085734d1bb6932d3f5b48fd.jpg)
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;
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/04/2011 10:34:03
|
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...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/04/2011 10:35:43
|
g4j
GUJ Ranger
![[Avatar]](/images/avatar/bea3c20edb84a0dd83a99a9a7274bc67.jpg)
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
|
|
|
 |
|
|