– Start
如果你想重用 HQL 语句,我们还可以使用命名 HQL。
package shangbo.hibernate.demo032;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
// 命名 HQL
@NamedQueries({
@NamedQuery(name="queryCustomerByName", query = "from Customer where customerName = :customerName")
})
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "customerId-generator")
@SequenceGenerator(name = "customerId-generator", sequenceName = "CUSTOMER_ID_SEQ")
private Integer customerId;
private String customerName;
public Customer() {
}
public Customer(String customerName) {
this.customerName = customerName;
}
public Integer getCustomerId() {
return customerId;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
}
package shangbo.hibernate.demo032;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
public class DataService implements AutoCloseable {
private SessionFactory sessionFactory;
public DataService() {
// 第一步:构造 ServiceRegistry
StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure(ClassLoader.getSystemResource("shangbo/hibernate/demo032/hibernate.cfg.xml")).build();
// 第二步:构造 Metadata
Metadata metadata = new MetadataSources(registry).getMetadataBuilder().applyPhysicalNamingStrategy(new MyPhysicalNamingStrategy()).build();
// 第三步:构造 SessionFactory
sessionFactory = metadata.buildSessionFactory();
}
public void beginTransaction() {
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
}
public void commit() {
Session session = sessionFactory.getCurrentSession();
session.getTransaction().commit();
session.close();
}
// Hibernate Query API
public Customer queryCustomerByName(String name) throws Exception {
Session session = sessionFactory.getCurrentSession();
org.hibernate.query.Query<Customer> query = session.createNamedQuery("queryCustomerByName", Customer.class);
query.setParameter("customerName", name);
return query.getSingleResult();
}
public void save(Object o) {
Session session = sessionFactory.getCurrentSession();
session.save(o);
}
@Override
public void close() throws Exception {
// 关闭 SessionFactory
sessionFactory.close();
}
}
– 更多参见:Hibernate 精萃
– 声 明:转载请注明出处
– Last Updated on 2019-07-10
– Written by ShangBo on 2019-07-10
– End