java - 如何使用HQL从实体中获取数据?

标签 java hibernate hql

我正在使用 HQL 从数据库中获取数据我遇到了 sql 语法异常请检查我的代码

Emp.java

@Entity

@Table(name="TBL_STD_EMP")
public class Emp 
{

@Id 
@GeneratedValue
   @Column(name = "id")
   private int id;

   @Column(name = "first_name")
   private String firstName;

   @Column(name = "last_name")
   private String lastName;

   @Column(name="SALARY")
   private int salary;  
   @Temporal(TemporalType.DATE)
   private Date joinDate;
   @ElementCollection
   @JoinTable(name="EMP_ADDRESS" ,joinColumns=@JoinColumn(name="USER_ID"))
   java.util.Collection <Address> address= new java.util.ArrayList<Address>();
     //setter and geeter methods

} 我的可嵌入类

@Embeddable
public class Address {
@Column(name="DOOR_NO")
int doorNO;

public int getDoorNO() {
    return doorNO;
}
public void setDoorNO(int doorNO) {
    this.doorNO = doorNO;
}
public String getStreetName() {
    return streetName;
}
public void setStreetName(String streetName) {
    this.streetName = streetName;
}
public String getCountryName() {
    return countryName;
}
public void setCountryName(String countryName) {
    this.countryName = countryName;
}
@Column(name="STREET_NAME")
String streetName;
@Column(name="COUNTY_NAME")
String countryName;

} 我的主课 包 com.hib.busness;

 import java.util.Date; 
 import java.util.List;

 import org.hibernate.HibernateException;
 import org.hibernate.Query;
 import org.hibernate.Session;
 import org.hibernate.SessionFactory;
 import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

 import com.hib.dto.Address;
 import com.hib.dto.EMP;

 public class MainClass {

/**
 * @param args
 */
private static SessionFactory factory;

public static void main(String[] args) {
    // TODO Auto-generated method stub

    try {
        factory = new Configuration().configure().buildSessionFactory();

    } catch (Throwable ex) {
        System.err.println("Failed to create sessionFactory object." + ex);
        throw new ExceptionInInitializerError(ex);
    }

    Transaction tx = null;
    Integer employeeID = null;
    Session session = factory.openSession();
    try {
        tx = session.beginTransaction();
        EMP employee = new EMP();
        employee.setFirstName("bhanu1");
        employee.setLastName("prasad");
        employee.setSalary(30000);
        employee.setJoinDate(new Date());
        employee.setDescription("Working as ProductEngineer");
        Address address = new Address();
        address.setCountryName("India");
        address.setDoorNO(1);
        address.setStreetName("mainStreet");
        Address address1 = new Address();
        address1.setCountryName("India1");
        address1.setDoorNO(2);
        address1.setStreetName("mainStreet1");
        employee.getAddress().add(address);
        employee.getAddress().add(address1);

        employeeID = (Integer) session.save(employee);
        tx.commit();
        tx = session.beginTransaction();
        String hql = "FROM EMP where  lastName='prasad' and doorNO=2";
        Query query = session.createQuery(hql);
        List results = query.list();
        System.out.println(results);
    } catch (HibernateException e) {
        if (tx != null)
            tx.rollback();
        e.printStackTrace();
    } finally {
        session.close();
    }

}

 }

有人帮我解决了 SQLSyntex 异常。

最佳答案

HQL 中,您可以使用点表示法导航实体的字段。在 EmpAddress 之间建立关联后,您可以在 HQL 语句中使用它。由于 doorNO 字段位于 Address 实体上,您应该通过 address 访问它。

尝试:

String hql = "FROM EMP e where e.lastName='prasad' and e.address.doorNO=2";

关于java - 如何使用HQL从实体中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18150512/

相关文章:

java - Hibernate IDENTITY 与 SEQUENCE 实体标识符生成器

mysql - 如何编写 HQL 查询

java - 是否有一种功能方法可以遍历基于最后处理的项目进行累积和过滤的流?

java - 通过 Motorola Reader FX7500 从多个天线读取 RFID 标签 - Java

java - 使用indexOf方法从arraylist获取字符串,但它被视为整数

java - spring + jpa + hibernate,列出表中的所有行

java - Hibernate 实体中的映射外键

java - 命名查询和分页

hibernate - JPQL/HQL 和 JPA/Hibernate : boolean expression in select constructor expression not working (unexpected AST node: AND, NPE、HqlSqlWalker.setAlias)?

java - GWT - 货币格式化程序安全客户端和服务器端