Giriş
HQL Query arayüzü tarafından kullanılır. Şöyle yaparız.
Açıklaması şöyle.
Şöyle yaparız.
Bulk delete cascade işlemi yapmaz.
Örnek
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
inner kelimesi yazılmayabilir. İki tablonun kesişimini bulur. Şeklen şöyle.
Örnek
Kullanıcı adı admin olan kişinin almadığı eğitimleri göstermek için şöyle yaparız.
Şöyle yaparız.
Açıklaması şöyle. Lazy one ilişkilerinde yüklenemsini sağlar.
Açıklaması şöyle.
outer kelimesi yazılmayabilir. Şeklen şöyle.
Soldaki tablonun tamamını dahil eder, sağdaki kesişimler varsa ekler yoksa null çıktı verir.
Şöyle yaparız.
Sonucu List<Map<...,...>> olarak alabilmeyi sağlar.
Örnek
Şöyle yaparız
Şöyle yaparız.
HQL ile veritabanına özel scalar function kullanılabilir.
Örnek
MySQL'deki time_to_sec meodunu kullanmak için şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
HQL Query arayüzü tarafından kullanılır. Şöyle yaparız.
String hql = "...";
Query q = session.createQuery(hql);
Foo foo = q.list().get(0);
HQL ve SQL FarkıAçıklaması şöyle.
HQL queries cannot perform DDL operations.count
HQL queries cannot insert single record into table.
An HQL query gives negligible performance degradation because of conversions when compared to SQL.
HQL queries cannot call PL/SQL program.
Şöyle yaparız.
"select count(*) from BookDetails b where b.language=:language ");
deleteBulk delete cascade işlemi yapmaz.
Örnek
Şöyle yaparız.
@Transactional
public void deleteUser(int userId) {
Query q = session.createQuery("delete User where id = :userId");
query.setParameter("userId", userId);
q.executeUpdate();
}
ÖrnekŞöyle yaparız.
Session session = ...;
String queryStr = "delete from SuperParent where name='...'";
Query query = session.createQuery(queryStr);
int noOfRows deleted = query.executeUpdate();
fromŞöyle yaparız.
"FROM Customer";
join kelimesi - inner joininner kelimesi yazılmayabilir. İki tablonun kesişimini bulur. Şeklen şöyle.
Örnek
Kullanıcı adı admin olan kişinin almadığı eğitimleri göstermek için şöyle yaparız.
"from Training tr where tr.id not in
( select t.id from TrainUser tu
join tu.training t join tu.user u
where u.username = :uname )"
ÖrnekŞöyle yaparız.
"FROM CvtermProp cp "
"JOIN db database ON (database.dbId = cp.value) "
"WHERE cp.typeId=3333 AND cp.cvtermId=1111 ");
join fetch kelimesiAçıklaması şöyle. Lazy one ilişkilerinde yüklenemsini sağlar.
Elimizde şöyle bir kod olsun.A "fetch" join allows associations or collections of values to be initialized along with their parent objects using a single select. This is particularly useful in the case of a collection. It effectively overrides the outer join and lazy declarations of the mapping file for associations and collections.
@Entity
public class Customer implements Serializable {
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="cheese_customers",
joinColumns={@JoinColumn(name="CUSTOMER_ID", referencedColumnName = "accountNumber")},
inverseJoinColumns={@JoinColumn(name="PRODUCT_ID", referencedColumnName="id")})
private List<Cheese> cheeses = new ArrayList<>();
...
}
Şöyle yaparız.session.createQuery("from Customer C join fetch C.cheeses").list();
insert Açıklaması şöyle.
left join with - left outer joinStatement typesBoth HQL and JPQL allow SELECT, UPDATE and DELETE statements to be performed. HQL additionally allows INSERT statements, in a form similar to a SQL INSERT FROM SELECT.
outer kelimesi yazılmayabilir. Şeklen şöyle.
Soldaki tablonun tamamını dahil eder, sağdaki kesişimler varsa ekler yoksa null çıktı verir.
Şöyle yaparız.
left join i3.analisys a3 WITH a3.something = :someValue
new mapSonucu List<Map<...,...>> olarak alabilmeyi sağlar.
Örnek
Şöyle yaparız
Session session = sessionFactory.getCurrentSession();
String HQL_QUERY = "select new map(user.id as id, user.firstName as fullName)
from User user";
List<Map<String,String>> usersList = session.createQuery(HQL_QUERY).list();
ÖrnekŞöyle yaparız.
@Query("select new Map(u.username as username , p.pname as pname) from Users u join
u.priviJoin p where u.username = :uname")
List<Users> findByUsername(@Param("uname") String uname);
scalar functionHQL ile veritabanına özel scalar function kullanılabilir.
Örnek
MySQL'deki time_to_sec meodunu kullanmak için şöyle yaparız.
"select count(*) from ProgramGroupEvent as eventLog
where eventLog.id= :id and
time_to_sec(timediff( now() , eventLog.eventDate )) < :seconds";
sumŞöyle yaparız.
@Query(value = "select p.client, sum(p.price) from PizzaOrder p group by p.client")
public List<?> topClients();
where kelimesiŞöyle yaparız.
"from Inventory where inventoryId='I001'"