28 Haziran 2018 Perşembe

SequenceGenerator Sınıfı

Veritabanından bir seferde tek bir sayı çeker.  SequenceHiLoGenerator ise bir havuz oluşturur.

26 Haziran 2018 Salı

@DiscriminatorOptions Anotasyonu

Giriş
Single Table Inheritance kullanan bir hiyerarşi olsun. Bu hiyerarşiye başka bir sınıftan OneToMany ilişki kurulursa bu anotasyon kullanılır.
force Alanı
Açıklaması şöyle
the table contains rows with extra discriminator values that are not mapped to a persistent class
Örnek
Şöyle yaparız.
@Entity
@Table(name = "TranzitOfficeLayer")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, include = "all")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorOptions(force = true)
public abstract class OfficeLayer {
  ...
}

Query Arayüzü - Kullanmayın

Giriş
Şu satırı dahil ederiz.
import org.hibernate.Query;
Bu arayüz deprecate edildi.

constructor - Hibernate Session
Bu sınıf Hibernate Session sınıfı tarafından yaratılır.

constructor - EntityManager
Eğer JPA kullanıyorsak şöyle yaparız.
entityManager.createNativeQuery("...")
  .unwrap(org.hibernate.Query.class)
  .setParameter("number", new Integer(number))
  .setParameter("userId", userId)
  .setParameter("startDate", startDate)
  .setParameter("endDate", endDate)
  .setResultTransformer(new MyClassTransformer())
  .list();
list metodu
Örnek
Şöyle yaparız.
@Autowired
SessionFactory sessionFactory;

public List<MyEntity> findSomeApples() {
  Session session = sessionFactory.getCurrentSession();
  List<?> result = session.createQuery("from MyEntity where apples=7")
      .list();
  @SuppressWarnings("unchecked")
  List<MyEntity> resultCasted = (List<MyEntity>) result;
  return resultCasted;
}
lockMode metodu
İmzası şöyle
Query.lockMode (String alis,LockMode lockMode);
scroll metodu
Şöyle yaparız.
ScrollableResults results = query.scroll(ScrollMode.FORWARD_ONLY);
setFetchSize metodu
Şöyle yaparız.
query.setFetchSize(Integer.MIN_VALUE);
setParameter metodu
Eğer native query kullanıyorsak named parameter (:myparameter) kullanılmaz. Bunun yerine (?myparameter) kullanılır.

Örnek
Şöyle yaparız.
String email = ...;
Query query = ...;
query.setParameter("email", email);
Örnek
Şöyle yaparız.
String sql="select * from PunchHistory where punchDate = :date1"

List<PunchHistory> results = 
  session.createQuery(StackperksConstants.sql)
  .setParameter("date1", java.sql.Date.valueOf(date), TemporalType.TIMESTAM)
  .list();
setParameterList metodu
Her parametre için çağırmak gerkir. Şöyle yaparız.
session.createQuery("select cat from Cat cat where cat.id in (:ids)")
  .setParameterList("ids", new Long[]{1,2,3,4,5})
setReadOnly metodu
Şöyle yaparız.
query.setReadOnly(true);

ConstraintViolationException Sınıfı

Giriş
Şu satırı dahil ederiz.
import org.hibernate.exception.ConstraintViolationException;
Tüm Hibernate exception sınıfları gibi HibernateException sınıfından kalıtır. HibernateException sınıfı da javax.persistence.PersistenceException sınıfından kalıtır.

Eğer kodun Hibernate'ten bağımsız olmasını istiyorsak javax.persistence.PersistenceException nesnesini yakalamak gerekir.

Diğer bazı exception sınıfları şöyle

- StateObjectException
- GenericJDBCException

Örnek
Şöyle yaparız.
try {
    sessionFactory.getCurrentSession().saveOrUpdate(entity);
} catch (ConstraintViolationException e) {
    // Ignore the exception here by doing nothing
}
Örnek
Hata mesajına ulaşmak için şöyle yaparız.
e.getCause().getMessage();