如何在休眠运行时获取 table 传递 table 名称和列名称的记录?

How can I get table records passing table name and column names at runtime in hibernate?

要求是从数据库中获取记录,其中在 运行 时间选择了特定列和 table 名称。

我正在使用 Java、Hibernate 和 Mysql。可以使用 JDBC。但我想用休眠来做。

Post 提示,如果有人知道的话

提前致谢

HibernateJDBC 有更多的特征。最好的功能是 Hibernate 支持 Object Oriented Principles。您可以为实体使用 PolymorphismInheritanceEncapsulation

您必须有一个 BaseEntity class 并且所有其他 class 必须从这个 class.

扩展
public class BaseEntity {

}

然后所有其他 classes 扩展这个 class。假设您还有另外两个 classes 或实体。

User.class

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Table(name = "USERS")
@Entity
public class User extends BaseEntity implements Serializable {

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

    @Column(name = "NAME")
    private String name;

    @Column(name = "SURNAME")
    private String surname;

    public User() {
    }

    public User(int id, String name, String surname) {
        this.id = id;
        this.name = name;
        this.surname = surname;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

}

Info.class

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Table(name = "INFO")
@Entity
public class Info extends BaseEntity implements Serializable {

    @Column(name = "TEXT")
    private String text;

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

    public Info() {
    }

    public Info(String text, int id) {
        this.text = text;
        this.id = id;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

}

您还必须为每个 class 添加 mapping 标签到 configuration.hbm.xml 您的 DAO 如下所示。

public List getList(BaseEntity baseEntity, String[] columnNames) {
    Criteria criteria = session.createCriteria(baseEntity.getClass(), "be");
    ProjectionList projectionList = Projections.projectionList();
    for (String columnName : columnNames) {
        projectionList.add(Projections.property("be." + columnName), columnName); // adding column for selection
    }
    criteria.setProjection(projectionList);
    criteria.setResultTransformer(new AliasToBeanResultTransformer(baseEntity.getClass())); // for mapping result to entity
    return criteria.list();
}

public static void main(String[] args) {
    String[] columnNames = {"name", "surname"}; // columnNames which you want to select
    List<Info> users = new GeneralDAO().getList(new User(), columnNames); // you can pass any class User, Info or etc.
}

嗯,Hibernate 可以做的远不止 JDBC,你要找的东西可以用 Hibernate 写成这样:

Query query = session.createSQLQuery(
"select s.stock_code from stock s where s.stock_code = :stockCode")
.setParameter("stockCode", "7277");
List result = query.list();

如您所见,table 名称和列可以动态定义,这至少与 JDBC 相当,甚至可能更简单。您不必使用参数,显然,您可以在代码中模块化构建查询。

更多详细信息参考 https://www.mkyong.com/hibernate/hibernate-native-sql-queries-examples/