use of org.hibernate.persister.entity.EntityPersister in project hibernate-orm by hibernate.
the class EntityAssociationResultSetProcessorTest method testManyToOneEntityProcessing.
@Test
public void testManyToOneEntityProcessing() throws Exception {
final EntityPersister entityPersister = sessionFactory().getEntityPersister(Message.class.getName());
// create some test data
Session session = openSession();
session.beginTransaction();
Message message = new Message(1, "the message");
Poster poster = new Poster(2, "the poster");
session.save(message);
session.save(poster);
message.poster = poster;
poster.messages.add(message);
session.getTransaction().commit();
session.close();
{
final LoadPlan plan = Helper.INSTANCE.buildLoadPlan(sessionFactory(), entityPersister);
final LoadQueryDetails queryDetails = Helper.INSTANCE.buildLoadQueryDetails(plan, sessionFactory());
final String sql = queryDetails.getSqlStatement();
final ResultSetProcessor resultSetProcessor = queryDetails.getResultSetProcessor();
final List results = new ArrayList();
final Session workSession = openSession();
workSession.beginTransaction();
workSession.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
PreparedStatement ps = connection.prepareStatement(sql);
ps.setInt(1, 1);
ResultSet resultSet = ps.executeQuery();
results.addAll(resultSetProcessor.extractResults(resultSet, (SessionImplementor) workSession, new QueryParameters(), new NamedParameterContext() {
@Override
public int[] getNamedParameterLocations(String name) {
return new int[0];
}
}, true, false, null, null));
resultSet.close();
ps.close();
}
});
assertEquals(1, results.size());
Object result = results.get(0);
assertNotNull(result);
Message workMessage = ExtraAssertions.assertTyping(Message.class, result);
assertEquals(1, workMessage.mid.intValue());
assertEquals("the message", workMessage.msgTxt);
assertTrue(Hibernate.isInitialized(workMessage.poster));
Poster workPoster = workMessage.poster;
assertEquals(2, workPoster.pid.intValue());
assertEquals("the poster", workPoster.name);
assertFalse(Hibernate.isInitialized(workPoster.messages));
workSession.getTransaction().commit();
workSession.close();
}
// clean up test data
session = openSession();
session.beginTransaction();
session.createQuery("delete Message").executeUpdate();
session.createQuery("delete Poster").executeUpdate();
session.getTransaction().commit();
session.close();
}
use of org.hibernate.persister.entity.EntityPersister in project hibernate-orm by hibernate.
the class EntityWithNonLazyCollectionResultSetProcessorTest method testEntityWithSet.
@Test
public void testEntityWithSet() throws Exception {
final EntityPersister entityPersister = sessionFactory().getEntityPersister(Person.class.getName());
// create some test data
Session session = openSession();
session.beginTransaction();
Person person = new Person();
person.id = 1;
person.name = "John Doe";
person.nickNames.add("Jack");
person.nickNames.add("Johnny");
session.save(person);
session.getTransaction().commit();
session.close();
{
final LoadPlan plan = Helper.INSTANCE.buildLoadPlan(sessionFactory(), entityPersister);
final LoadQueryDetails queryDetails = Helper.INSTANCE.buildLoadQueryDetails(plan, sessionFactory());
final String sql = queryDetails.getSqlStatement();
final ResultSetProcessor resultSetProcessor = queryDetails.getResultSetProcessor();
final List results = new ArrayList();
final Session workSession = openSession();
workSession.beginTransaction();
workSession.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
PreparedStatement ps = connection.prepareStatement(sql);
ps.setInt(1, 1);
ResultSet resultSet = ps.executeQuery();
results.addAll(resultSetProcessor.extractResults(resultSet, (SessionImplementor) workSession, new QueryParameters(), new NamedParameterContext() {
@Override
public int[] getNamedParameterLocations(String name) {
return new int[0];
}
}, true, false, null, null));
resultSet.close();
ps.close();
}
});
assertEquals(2, results.size());
Object result1 = results.get(0);
assertSame(result1, results.get(1));
assertNotNull(result1);
Person workPerson = ExtraAssertions.assertTyping(Person.class, result1);
assertEquals(1, workPerson.id.intValue());
assertEquals(person.name, workPerson.name);
assertTrue(Hibernate.isInitialized(workPerson.nickNames));
assertEquals(2, workPerson.nickNames.size());
assertEquals(person.nickNames, workPerson.nickNames);
workSession.getTransaction().commit();
workSession.close();
}
// clean up test data
session = openSession();
session.beginTransaction();
session.delete(person);
session.getTransaction().commit();
session.close();
}
use of org.hibernate.persister.entity.EntityPersister in project hibernate-orm by hibernate.
the class EntityWithNonLazyOneToManySetResultSetProcessorTest method testEntityWithSet.
@Test
public void testEntityWithSet() throws Exception {
final EntityPersister entityPersister = sessionFactory().getEntityPersister(Poster.class.getName());
// create some test data
Session session = openSession();
session.beginTransaction();
Poster poster = new Poster();
poster.pid = 0;
poster.name = "John Doe";
Message message1 = new Message();
message1.mid = 1;
message1.msgTxt = "Howdy!";
message1.poster = poster;
poster.messages.add(message1);
Message message2 = new Message();
message2.mid = 2;
message2.msgTxt = "Bye!";
message2.poster = poster;
poster.messages.add(message2);
session.save(poster);
session.getTransaction().commit();
session.close();
session = openSession();
session.beginTransaction();
Poster posterGotten = (Poster) session.get(Poster.class, poster.pid);
assertEquals(0, posterGotten.pid.intValue());
assertEquals(poster.name, posterGotten.name);
assertTrue(Hibernate.isInitialized(posterGotten.messages));
assertEquals(2, posterGotten.messages.size());
for (Message message : posterGotten.messages) {
if (message.mid == 1) {
assertEquals(message1.msgTxt, message.msgTxt);
} else if (message.mid == 2) {
assertEquals(message2.msgTxt, message.msgTxt);
} else {
fail("unexpected message id.");
}
assertSame(posterGotten, message.poster);
}
session.getTransaction().commit();
session.close();
{
final LoadPlan plan = Helper.INSTANCE.buildLoadPlan(sessionFactory(), entityPersister);
final LoadQueryDetails queryDetails = Helper.INSTANCE.buildLoadQueryDetails(plan, sessionFactory());
final String sql = queryDetails.getSqlStatement();
final ResultSetProcessor resultSetProcessor = queryDetails.getResultSetProcessor();
final List results = new ArrayList();
final Session workSession = openSession();
workSession.beginTransaction();
workSession.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
PreparedStatement ps = connection.prepareStatement(sql);
ps.setInt(1, 0);
ResultSet resultSet = ps.executeQuery();
results.addAll(resultSetProcessor.extractResults(resultSet, (SessionImplementor) workSession, new QueryParameters(), new NamedParameterContext() {
@Override
public int[] getNamedParameterLocations(String name) {
return new int[0];
}
}, true, false, null, null));
resultSet.close();
ps.close();
}
});
assertEquals(2, results.size());
Object result1 = results.get(0);
assertNotNull(result1);
assertSame(result1, results.get(1));
Poster workPoster = ExtraAssertions.assertTyping(Poster.class, result1);
assertEquals(0, workPoster.pid.intValue());
assertEquals(poster.name, workPoster.name);
assertTrue(Hibernate.isInitialized(workPoster.messages));
assertEquals(2, workPoster.messages.size());
assertTrue(Hibernate.isInitialized(posterGotten.messages));
assertEquals(2, workPoster.messages.size());
for (Message message : workPoster.messages) {
if (message.mid == 1) {
assertEquals(message1.msgTxt, message.msgTxt);
} else if (message.mid == 2) {
assertEquals(message2.msgTxt, message.msgTxt);
} else {
fail("unexpected message id.");
}
assertSame(workPoster, message.poster);
}
workSession.getTransaction().commit();
workSession.close();
}
// clean up test data
session = openSession();
session.beginTransaction();
session.delete(poster);
session.getTransaction().commit();
session.close();
}
use of org.hibernate.persister.entity.EntityPersister in project hibernate-orm by hibernate.
the class NonEncapsulatedCompositeIdResultSetProcessorTest method testCompositeIdWithKeyManyToOne.
@Test
public void testCompositeIdWithKeyManyToOne() throws Exception {
final String personId = "John Doe";
Person p = new Person();
p.setName(personId);
final Address a = new Address();
a.setPerson(p);
p.setAddress(a);
a.setType("HOME");
a.setStreet("Main St");
a.setState("Sweet Home Alabama");
a.setZip("3181");
Session s = openSession();
Transaction t = s.beginTransaction();
s.persist(p);
t.commit();
s.close();
final EntityPersister personPersister = sessionFactory().getEntityPersister(Person.class.getName());
final EntityPersister addressPersister = sessionFactory().getEntityPersister(Address.class.getName());
{
final List results = getResults(addressPersister, new Callback() {
@Override
public void bind(PreparedStatement ps) throws SQLException {
ps.setString(1, personId);
ps.setString(2, "HOME");
}
@Override
public QueryParameters getQueryParameters() {
QueryParameters qp = new QueryParameters();
qp.setPositionalParameterTypes(new Type[] { addressPersister.getIdentifierType() });
qp.setPositionalParameterValues(new Object[] { a });
qp.setOptionalObject(a);
qp.setOptionalEntityName(addressPersister.getEntityName());
qp.setOptionalId(a);
qp.setLockOptions(LockOptions.NONE);
return qp;
}
});
assertEquals(1, results.size());
Object result = results.get(0);
assertNotNull(result);
}
// test loading the Person (the entity with normal id def, but mixed composite fk to Address)
{
final List results = getResults(personPersister, new Callback() {
@Override
public void bind(PreparedStatement ps) throws SQLException {
ps.setString(1, personId);
}
@Override
public QueryParameters getQueryParameters() {
QueryParameters qp = new QueryParameters();
qp.setPositionalParameterTypes(new Type[] { personPersister.getIdentifierType() });
qp.setPositionalParameterValues(new Object[] { personId });
qp.setOptionalObject(null);
qp.setOptionalEntityName(personPersister.getEntityName());
qp.setOptionalId(personId);
qp.setLockOptions(LockOptions.NONE);
return qp;
}
});
assertEquals(1, results.size());
Object result = results.get(0);
assertNotNull(result);
}
// CardField cardFieldWork = ExtraAssertions.assertTyping( CardField.class, result );
// assertEquals( cardFieldGotten, cardFieldWork );
// clean up test data
s = openSession();
s.beginTransaction();
s.createQuery("delete Address").executeUpdate();
s.createQuery("delete Person").executeUpdate();
s.getTransaction().commit();
s.close();
}
use of org.hibernate.persister.entity.EntityPersister in project hibernate-orm by hibernate.
the class BasicWalkingTest method testIt.
@Test
public void testIt() {
EntityPersister ep = (EntityPersister) sessionFactory().getClassMetadata(Message.class);
MetamodelGraphWalker.visitEntity(new LoggingAssociationVisitationStrategy(), ep);
}
Aggregations