【发布时间】:2012-08-02 23:23:07
【问题描述】:
我正在尝试编写一个使用 hibernate 写入数据库的应用程序,但是在某些操作中,我必须对 HB 制作的表中的数据使用 JDBC。
JDBS 需要为管理员提供创建 SQL 查询的能力,该查询将返回有关数据库中数据的统计信息,例如指定类型的已处理文档的数量、成功/失败的登录尝试次数或订单中产品的总价值。
为此,我做了一个 from ,它允许创建覆盖 toString() 并返回漂亮的 sql 查询字符串的类。 所有的作品,但现在我试图通过让管理员能够选择表/列名来让管理员生活得更轻松。这是一个问题,因为它们是由hibernate创建的。一些由@column 注释,另一些由字段名称。 我如何检查字段映射? 我知道反射的全部内容,但在 java 中还没有做太多。
例子
@Entity
@Table(name= "my_table_name" )
public class TableOFSomething implements Serializable{
//This field isn't mapped into database and info about it is not requred.
//In fact, info about it may cause an error.
private static final long serialVersionUID = 7L;
@Id
@Column(name="id")
private String id;
private String fieldOne;
@Column(name="field_two")
private String fieldTwo;
@Column(name="renamed_just_for_fun")
private int Number;
//code with getters & setters
}
如何编写具有类似定义的方法
public <T> String tableName(Class<T> Target); //returns name of table in database
public <T> ArrayList<String> tabelFields(Class<T> Target); //returns name of fields in database
【问题讨论】:
-
如果你使用 JDBC、SQL、表和列名来查询你的数据库,你为什么要关心 Hibernate 实体?为什么不使用数据库元数据?如果您真的想了解实体及其属性,请使用 EntityManagerFactory 的元模型。 docs.oracle.com/javaee/6/api/javax/persistence/…
-
您确定 HQL 不足以满足您的查询吗?它有聚合。
-
并不是说 HQL 不适合这项任务,但工具是为知道 SQL 而不是 HQL 的人准备的。当然我可以告诉他点击按钮或学习 HQL,但是给他一个他熟悉的 SQL 工具不是更好吗? @JB Nizet 好点,但我想尝试在不连接数据库的情况下准备这些信息,并用于学习目的;)
标签: sql spring hibernate reflection