Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL使用Java、Spring和Hibernate查看CSV文件_Java_Mysql_Hibernate_Spring_Orm - Fatal编程技术网

MySQL使用Java、Spring和Hibernate查看CSV文件

MySQL使用Java、Spring和Hibernate查看CSV文件,java,mysql,hibernate,spring,orm,Java,Mysql,Hibernate,Spring,Orm,我被要求从MySQL的视图中输出一个CSV文件。我目前正在编写的应用程序使用Spring和Hibernate创建数据库,但视图只是交给了我 Hibernate对此视图一无所知,但我想这样做: public List<Object> getCsvView() { return (List<Object>) getHibernateTemplate().find("from myView"); } public List getCsvView(){ return(Lis

我被要求从MySQL的视图中输出一个CSV文件。我目前正在编写的应用程序使用Spring和Hibernate创建数据库,但视图只是交给了我

Hibernate对此视图一无所知,但我想这样做:

public List<Object> getCsvView() {
  return (List<Object>) getHibernateTemplate().find("from myView");
}
public List getCsvView(){
return(List)getHibernateTemplate().find(“从myView”);
}
我的猜测是,我可以映射一个本机查询,以便hibernate了解该视图。当我阅读文档时,这变得有点棘手:

您还可以将本机查询[…]映射到 要做到这一点,你需要描述 SQL结果集结构使用 @SqlResultSetMapping[…]

现在,我真的对映射结果的结构不感兴趣。我很高兴结构只是一堆物体

此外,他们可能随时改变这种观点。我真的对我的应用程序不感兴趣,甚至不知道它的视图


那么,在Spring/Hibernate的世界中,有没有一种简单的方法可以做到这一点,或者我是在以一种艰难的方式解决这个问题呢?

只要在视图上执行一个本机查询,您就会得到一个
对象[]
列表,其中每个列都有标量值。从文件中:

最基本的SQL查询是获取 标量(值)列表

这些将返回一个对象列表 带有标量值的数组(
Object[]
) 对于CATS表中的每列。 Hibernate将使用
ResultSetMetadata
推断实际的顺序和类型 返回的标量值的

以避免使用
ResultSetMetadata
,或者干脆 返回的内容更加明确,一个 可以使用
addScalar()

此查询指定:

  • SQL查询字符串
  • 要返回的列和类型
这将返回对象数组,但 现在它不会用了
ResultSetMetadata
但将改为 显式获取ID、名称和 出生日期列分别作为 长,弦和短的距离 基础结果集。这也意味着 只有这三列是 返回,即使查询是 使用*可以返回比 列出了三列

可以省略该类型 所有或部分 标量

sess.createSQLQuery("SELECT * FROM CATS")
 .addScalar("ID", Hibernate.LONG)
 .addScalar("NAME")
 .addScalar("BIRTHDATE")
这基本上与查询相同 以前是,但现在是
ResultSetMetaData
用于确定名称和名称的类型 出生日期,其中ID的类型为 明确指定

java.sql.Types
如何从
ResultSetMetaData
映射到 休眠类型由 方言。如果未指定特定类型 已映射,或不会导致 预期类型,可以 通过呼叫来定制它
中的registerHibernateType
方言


看起来很适合在不了解视图的情况下生成CVS文件:)

有趣。我同意这看起来正是我需要的。有没有一种更合适的方法可以让会话脱离“getHibernateTemplate()”?我可以将会话注入到dao impl中。我只是想看看是否有一种巧妙的方法可以用HibernateTemplate做同样的事情。可能是hibernateTemplate.getSessionFactory().openSession()@斯蒂芬诺:就个人而言,我不使用HibernateTemplate,我更喜欢。但是检查一下HibernateTemplate#executeFind
。非常好。这一点在整个调查中得到了证实。hibernate调用“select*fromMyView”,但在“没有JDBC类型的方言映射:-1”上出现了问题(我注意到视图中有一些长文本字段。我想我遇到了这个问题:
sess.createSQLQuery("SELECT * FROM CATS")
 .addScalar("ID", Hibernate.LONG)
 .addScalar("NAME", Hibernate.STRING)
 .addScalar("BIRTHDATE", Hibernate.DATE)
sess.createSQLQuery("SELECT * FROM CATS")
 .addScalar("ID", Hibernate.LONG)
 .addScalar("NAME")
 .addScalar("BIRTHDATE")