package org.hibernate.bugs;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.junit.Before;
import org.junit.Test;
public class Hhh3930 extends BaseUnitTestCase {
@Entity
@Table(name = "Address")
public static class Address {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne(mappedBy = "address")
private Customer customer;
}
@Entity
@Table(name = "Customer")
public static class Customer {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Address address = new Address();
public Long getId() {
return id;
}
}
private Configuration config;
private SessionFactory sessionFactory;
@SuppressWarnings("deprecation")
@Before
public void setup() {
config = new Configuration();
config.addAnnotatedClass(Customer.class);
config.addAnnotatedClass(Address.class);
config.setProperty("hibernate.connection.driver_class", "org.hsqldb.jdbcDriver");
config.setProperty("hibernate.connection.url", "jdbc:hsqldb:mem:myunittests");
config.setProperty("hibernate.connection.username", "sa");
config.setProperty("hibernate.connection.password", "");
config.setProperty("hibernate.connection.pool_size", "1");
config.setProperty("hibernate.current_session_context_class", "thread");
config.setProperty("hibernate.hbm2ddl.auto", "update");
config.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
config.setProperty("hibernate.show_sql", "true");
sessionFactory = config.buildSessionFactory();
}
@Test
public void persistentities() {
Customer c = new Customer();
Address a = new Address();
c.address = a;
a.customer = c;
Session session = sessionFactory.getCurrentSession();
Transaction transaction = session.beginTransaction();
session.save(c);
transaction.commit();
session = sessionFactory.getCurrentSession();
transaction = session.beginTransaction();
System.out.println("Before retrieve");
@SuppressWarnings("unchecked")
List<Customer> list = session.createCriteria(Customer.class).list();
System.out.println("After retrieve");
System.out.println(list);
}
}