Olá pessoal,
estou com um problema usando Hibernate. Estou anotando as classes e mandando o Hibernate gerar as tabelas. Ele cria as duas tabelas, mas na hora de inserir os dados não está fazendo o que quero.@Entity
@Table(name="USUARIOS")
public class Usuario implements java.io.Serializable {
private static final long serialVersionUID = -5704331948119910453L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="USUARIO_ID")
private Integer id;
@Column(name="NAME", nullable=false)
private String name;
@Column(name="LOGIN", nullable=false)
private String login;
@Column(name="PASSWORD", nullable=false)
private String password;
@OneToMany(mappedBy="usuario", fetch=FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private List<Produto> produtos;
@Entity
@Table(name="PRODUTOS")
public class Produto implements java.io.Serializable {
private static final long serialVersionUID = 2343684446954574074L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="PRODUTO_ID")
private Integer id;
@Column(name="NAME", nullable=false)
private String name;
@Column(name="PRICE", nullable=false)
private double price;
@Column(name="STOCK", nullable=false)
private int stock;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="ID_PROD")
private Usuario usuario;
CREATE TABLE `devmedia`.`USUARIOS` (
`USUARIO_ID` int(11) NOT NULL auto_increment,
`LOGIN` varchar(255) NOT NULL,
`NAME` varchar(255) NOT NULL,
`PASSWORD` varchar(255) NOT NULL,
PRIMARY KEY (`USUARIO_ID`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
CREATE TABLE `devmedia`.`PRODUTOS` (
`PRODUTO_ID` int(11) NOT NULL auto_increment,
`NAME` varchar(255) NOT NULL,
`PRICE` double NOT NULL,
`STOCK` int(11) NOT NULL,
`ID_PROD` int(11) default NULL,
PRIMARY KEY (`PRODUTO_ID`),
KEY `FKF2D2009A721E3EDD` (`ID_PROD`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
public class TestDAO {
public static void main(String[] args) {
UsuarioDAO dao = new UsuarioDAO();
Usuario usuario = new Usuario();
usuario.setName("João da Silva");
usuario.setLogin("jao");
usuario.setPassword("123");
Produto p1 = new Produto();
p1.setName("Produto um");
p1.setPrice(15d);
p1.setStock(100);
Produto p2 = new Produto();
p2.setName("Produto dois");
p2.setPrice(25d);
p2.setStock(200);
Produto p3 = new Produto();
p3.setName("Produto três");
p3.setPrice(35d);
p3.setStock(500);
List<Produto> produtos = new ArrayList<Produto>();
produtos.add(p1);
produtos.add(p2);
produtos.add(p3);
usuario.setProdutos(produtos);
dao.addUsuario(usuario);
UsuarioDAO dao = new UsuarioDAO();
Usuario usuario = dao.getUsuario(1);
System.out.println(">>> "+usuario.getProdutos());
Hibernate: select usuario0_.USUARIO_ID as USUARIO1_3_0_, usuario0_.LOGIN as LOGIN3_0_, usuario0_.NAME as NAME3_0_, usuario0_.PASSWORD as PASSWORD3_0_ from USUARIOS usuario0_ where usuario0_.USUARIO_ID=? ERROR - failed to lazily initialize a collection of role: devmedia.entity.Usuario.produtos, no session or session was closed org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: devmedia.entity.Usuario.produtos, no session or session was closed at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380) at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:372) at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:365) at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:108) at org.hibernate.collection.PersistentBag.toString(PersistentBag.java:506) at java.lang.String.valueOf(String.java:2827) at java.lang.StringBuilder.append(StringBuilder.java:115) at devmedia.test.TestDAO.main(TestDAO.java:48) Exception in thread "main" org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: devmedia.entity.Usuario.produtos, no session or session was closed at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380) at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:372) at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:365) at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:108) at org.hibernate.collection.PersistentBag.toString(PersistentBag.java:506) at java.lang.String.valueOf(String.java:2827) at java.lang.StringBuilder.append(StringBuilder.java:115) at devmedia.test.TestDAO.main(TestDAO.java:48)O quê está errado? :cry: Bjos...
