package com.manning.hsia.dvdstore.test;
import java.util.List;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
import org.testng.annotations.Test;
import com.manning.hsia.dvdstore.model.Actor;
import com.manning.hsia.dvdstore.model.Country;
import com.manning.hsia.dvdstore.model.Director;
import com.manning.hsia.dvdstore.model.Item;
import com.manning.hsia.dvdstore.model.Rating;
import com.manning.hsia.dvdstore.util.TestCase;
public class IndexedEmbeddedTest extends TestCase {
@Test(groups="ch04")
public void testEmbedded() throws Exception {
Session session = factory.openSession();
Item item = new Item();
item.setDescription("Great DVD");
item.setEan("123456789012");
item.setTitle("Great DVD");
item.setRating( new Rating() );
item.getRating().setOverall(5);
item.getRating().setPicture(4);
item.getRating().setScenario(5);
item.getRating().setSoundtrack(3);
Transaction tx = session.beginTransaction();
session.save(item);
tx.commit();
session.clear();
tx = session.beginTransaction();
FullTextSession fts = Search.getFullTextSession(session);
List results = fts.createFullTextQuery( new TermQuery( new Term("rating.overall", "5" ) ), Item.class ).list();
assert results.size() == 1;
fts.delete( results.get(0) );
tx.commit();
fts.close();
}
@Test(groups="ch04")
public void testCollectionOfEmbedded() throws Exception {
Session session = factory.openSession();
Item item = new Item();
item.setDescription("Great DVD");
item.setEan("123456789012");
item.setTitle("Great DVD");
item.setRating( new Rating() );
item.getRating().setOverall(5);
item.getRating().setPicture(4);
item.getRating().setScenario(5);
item.getRating().setSoundtrack(3);
Country country = new Country();
country.setName("Germany");
item.getDistributedIn().add(country);
country = new Country();
country.setName("Italy");
item.getDistributedIn().add(country);
Transaction tx = session.beginTransaction();
session.save(item);
tx.commit();
session.clear();
tx = session.beginTransaction();
FullTextSession fts = Search.getFullTextSession(session);
List results = fts.createFullTextQuery( new TermQuery( new Term("distributedIn.name", "italy" ) ), Item.class ).list();
assert results.size() == 1;
fts.delete( results.get(0) );
tx.commit();
fts.close();
}
@Test(groups="ch04")
public void testEntityAssociations() throws Exception {
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
Item item = new Item();
item.setDescription("Great DVD");
item.setEan("123456789012");
item.setTitle("Great DVD");
Director director = new Director();
director.setName("Emmanuel");
director.getItems().add(item);
item.setDirector(director);
Actor actor = new Actor();
actor.setName("John");
session.save(actor);
item.getActors().add(actor);
actor.getItems().add(item);
session.save(item);
session.save(director);
tx.commit();
session.clear();
tx = session.beginTransaction();
actor = (Actor) session.get( Actor.class, actor.getId() );
actor.setName("John Griffin");
director = (Director) session.get( Director.class, director.getId() );
director.setName("emmanuel Bernard");
tx.commit();
session.clear();
tx = session.beginTransaction();
FullTextSession fts = Search.getFullTextSession(session);
BooleanQuery query = new BooleanQuery();
query.add( new TermQuery( new Term("actors.name", "griffin" ) ), BooleanClause.Occur.MUST );
query.add( new TermQuery( new Term("director.name", "bernard" ) ), BooleanClause.Occur.MUST );
List results = fts.createFullTextQuery( query, Item.class ).list();
assert results.size() == 1;
fts.delete( results.get(0) );
tx.commit();
fts.close();
}
}