Query

package org.example.demo.hibernate;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Test {
    public static void main(String[] args) {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
        EntityManager em = factory.createEntityManager();

        em.createQuery("from Person").getResultList();

        em.close();
        factory.close();
    }
}

生成 SQL

select person0_.id as id1_3_, person0_.address as address2_3_, person0_.createdOn as createdO3_3_, person0_.name as name4_3_, person0_.nickName as nickName5_3_, person0_.version as version6_3_ from Person person0_

TypedQuery

package org.example.demo.hibernate;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Test {
    public static void main(String[] args) {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
        EntityManager em = factory.createEntityManager();

        em.createQuery("select p from Person p", Person.class).getResultList();

        em.close();
        factory.close();
    }
}

生成 SQL

select person0_.id as id1_3_, person0_.address as address2_3_, person0_.createdOn as createdO3_3_, person0_.name as name4_3_, person0_.nickName as nickName5_3_, person0_.version as version6_3_ from Person person0_

若将第 12 行改为 em.createQuery("select p, p.phones from Person p", Person.class).getResultList(); 则将抛异常 java.lang.IllegalArgumentException: Cannot create TypedQuery for query with more than one return using requested result type [org.example.demo.hibernate.Person]

EntityManager.createNamedQuery

package org.example.demo.hibernate;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Test {
    public static void main(String[] args) {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
        EntityManager em = factory.createEntityManager();

        em.createNamedQuery("get_person_by_name").setParameter("name", "bob").getResultList();

        em.close();
        factory.close();
    }
}

生成的 SQL

select person0_.id as id1_3_, person0_.address as address2_3_, person0_.createdOn as createdO3_3_, person0_.name as name4_3_, person0_.nickName as nickName5_3_, person0_.version as version6_3_ from Person person0_ where person0_.name='bob'

EntityManager.createNamedQuery TypedQuery

package org.example.demo.hibernate;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Test {
    public static void main(String[] args) {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
        EntityManager em = factory.createEntityManager();

        em.createNamedQuery("get_person_by_name", Person.class).setParameter("name", "bob").getResultList();

        em.close();
        factory.close();
    }
}

生成的 SQL

select person0_.id as id1_3_, person0_.address as address2_3_, person0_.createdOn as createdO3_3_, person0_.name as name4_3_, person0_.nickName as nickName5_3_, person0_.version as version6_3_ from Person person0_ where person0_.name='bob'

Basic JPA Query usage

package org.example.demo.hibernate;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.FlushModeType;
import javax.persistence.Persistence;

public class Test {
    public static void main(String[] args) {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
        EntityManager em = factory.createEntityManager();

        em.createQuery("select p " + "from Person p " + "where p.name like :name").setParameter("name", "bob")
        // timeout - in milliseconds
                .setHint("javax.persistence.query.timeout", 2000)
                // flush only at commit time
                .setFlushMode(FlushModeType.COMMIT).getResultList();

        em.close();
        factory.close();
    }
}

生成的 SQL

select person0_.id as id1_3_, person0_.address as address2_3_, person0_.createdOn as createdO3_3_, person0_.name as name4_3_, person0_.nickName as nickName5_3_, person0_.version as version6_3_ from Person person0_ where person0_.name like 'bob'

FIXME

JPA name parameter binding

package org.example.demo.hibernate;

import java.util.Date;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.TemporalType;

public class Test {
    public static void main(String[] args) {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
        EntityManager em = factory.createEntityManager();

        em.createQuery("from Person p where p.createdOn > :timestamp")
                .setParameter("timestamp", new Date(), TemporalType.DATE).getResultList();

        em.close();
        factory.close();
    }
}

生成的 SQL

select person0_.id as id1_3_, person0_.address as address2_3_, person0_.createdOn as createdO3_3_, person0_.name as name4_3_, person0_.nickName as nickName5_3_, person0_.version as version6_3_ from Person person0_ where person0_.createdOn>'2017-06-24 20:16:12'

JPA positional parameter binding

package org.example.demo.hibernate;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Test {
    public static void main(String[] args) {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
        EntityManager em = factory.createEntityManager();

        em.createQuery("from Person p where p.name like ?1").setParameter(1, "J%").getResultList();

        em.close();
        factory.close();
    }
}

生成的 SQL

select person0_.id as id1_3_, person0_.address as address2_3_, person0_.createdOn as createdO3_3_, person0_.name as name4_3_, person0_.nickName as nickName5_3_, person0_.version as version6_3_ from Person person0_ where person0_.name like 'J%'

JPA getResultList() result

package org.example.demo.hibernate;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Test {
    public static void main(String[] args) {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
        EntityManager em = factory.createEntityManager();

        Person p1 = new Person();
        p1.setName("p1");
        Person p2 = new Person();
        p2.setName("p2");

        em.getTransaction().begin();
        em.persist(p1);
        em.persist(p2);
        em.getTransaction().commit();

        // javax.persistence.NonUniqueResultException: query did not return a unique result: 2
        em.createQuery("from Person").getSingleResult();

        em.close();
        factory.close();
    }
}

results matching ""

    No results matching ""