@Stateless
public class TravelAgentBeean implements TravelAgentRemote {
@PersistenceUnit(unitName="JPADB")
private EntityManagerFactory factory;
// მიშნველობა არ აქ TRANSACTION/EXTENDED-ს
@PersistenceContext(unitName="JPADB",
type=PersistenceContextType.EXTENDED)
EntityManager manager;
@Override
....
public void flushModeExample(){
/* ილუსტრირება რომ მოვახდინოთ FlushMode-ბზე
* ენთით მენეჯერი არის შექმნილი დაინჯექტებული
* ფექტორისგან */
EntityManager createdManager = factory
.createEntityManager();
try{
// შევქმნათ Person
Person newPerson2 = new Person();
newPerson2.setId(2);
newPerson2.setName("მისტერ ბინი");
newPerson2.setAge(44);
// აქ flush მეთოდი არის AUTO
createdManager.persist(newPerson2);
Person person2 = manager.find(Person.class, 2);
if (person2 != null) {
// არ არ შევა რადგან
// null -ს დააბრუნებს find()
}else{
//აქ კი შემოვა
}
// ქუერი გავაკეთოთ, რის შემდეგაც flush მოხდება
Person person1 = (Person)createdManager
.createQuery("FROM Person c WHERE c.id = 1")
.getSingleResult();
// და შემდეგ find
person2 = manager.find(Cabin.class, 2);
if (person2 == null){
// აქ კვლავ არ შემოვა, რადგან null აღარაა.
}else{
// კვლავ არ შემოვედით
}
// ახლა კი ვიმუშავოთ COMMIT-ით.
createdManager.setFlushMode(FlushModeType.COMMIT);
// დავსეტოთ ახალი მონაცემი
newPerson2.setAge(99);
// ამასთან გავაკეთოთ ქუერიც
person1 = (Person)createdManager
.createQuery("FROM Person c WHERE c.id = 1")
.getSingleResult();
// რეფრეშიც გავუკეთოთ
manager.refresh(person2);
if (person2.getAge() == 99) {
/* ამ ყვლაფრის მერე მაინც არ
* იქნება 99? არა, არ იქნება, რადგან
* COMMIT ით ვაკეტებთ. */
}else{
// კვლავ აქ შემოვალთ
}
// ახლა კი flush გავაკეთოთ!
createdManager.flush();
// დავარეფრეშოთ
manager.refresh(person2);
if (person2.getAge() != 99) {
// რათქმაუნდა ამ დროს უკვე
//მნიშვნელობა 99 ის ტოლია!
}else{
// კვლავ აქ ვართ
}
}finally{
// მოვრჩით საქმეს და დავხუროთ
createdManager.close();
}
}
}
}