草庐IT

Java/hibernate : how to write DAO code for complex SQLs

我目前的工作场所使用标准的Spring/Hibernate/JSP组合通过XML向其Flex客户端提供内容。访问数据的方式有很多种,但最普遍的方式是通过直接SQL调用数据库并手动转换为XML。问题在于,随着应用程序变得越来越大,SQL变得更加复杂且难以维护。好像维护使用StringBuilder创建的SQL还不够困难,现在更糟糕的是,这些SQL是使用许多if语句和循环动态构建的。我知道通常正确的方法是使用Hibernate查询和实体来获取项目。但是,在我们的某些请求中,结果无法映射到单个Hibernate实体,恐怕需要使用直接SQL。解决这个问题的正确方法是什么?有没有办法让动态sql

java - Hibernate - 对具有枚举属性的 Bean 使用 native 查询和别名?

我在hibernate中使用native查询来为包含枚举属性的bean起别名时遇到问题。调用query.list()时出现InvocationTargetException。我的例子如下:@Entity(name="table1")publicclassClass1{@Column(name="col1")@NotNullprivateIntegerprop1;@Column(name="col2")@NotNullprivateStringprop2;@Column(name="col3",length=6)@Enumerated(value=EnumType.STRING)priv

java - 如何从 java.sql.Connection 获取用户名?

我有一个在Weblogic中创建的SQLServer数据源,用户名为“sa”。在代码中,我使用以下方法获取用户名。Contextctx=newInitialContext(prop);Objectobj=ctx.lookup("sqlserver1");System.out.println("DataSourceFound….");DataSourceds=(DataSource)obj;Connectionconn=ds.getConnection();DatabaseMetaDatamtdt=conn.getMetaData();//GetUserNameSystem.out.pr

java - 带有子查询的 JPQL 以选择最大计数

我正在尝试编写一个jpql查询来选择评论最多的用户。如果两个用户的评论数量相同,我想同时选择两者。我试过了,像这样:SELECTc.user,COUNT(c.id)ascommentCountFROMCommentcWHEREcommentCount=(SELECTMAX(SIZE(user.comments))FROMUseruser)GROUPBYc.user还有这个:SELECTc.userFROMCommentcGROUPBYc.userHAVINGCOUNT(c)=(SELECTMAX(SIZE(user.comments))FROMUseruser)这两种方法都不起作用。我

java - Java 中非常奇怪的 PreparedStatement?

我今天在一个程序中发现了一个非常奇怪的PreparedStatement来处理我收到的错误。顺藤摸瓜,发现了一些令人费解的SQL。现在,我不是SQL或PreparedStatements的高手,但这似乎是非常错误的。我还应该提到,这适用于同事的计算机,但不适用于我的计算机。staticfinalStringSELECT_UNCOMPLETE_TASKS_FOR_UPGRADE="SELECTi.employeeid,i.taskid,i.itptaskarchivecd,i.itptaskstartdt,i.itptaskcompletiondt,t.taskobsoletecd,"+

java - 以极高的速度获取行

我在Oracle中有一个非常大的表(数亿行,包含数字和字符串),我需要读取该表的所有内容,对其进行格式化并写入文件或任何其他资源。通常我的解决方案是这样的:packagemy.odp;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileWriter;importjava.util.concurrent.ArrayBlockingQueue;importjava.util.concurrent.TimeUnit;importjava.lang.Throwable;importjava.sql.*;public

java - hibernate导入import.sql失败

我想在每次应用程序运行时自动删除表格并创建一个新表格,并自动插入预定义的数据。我已经在import.sql中准备了数据。我已经在application.properties中设置了spring.jpa.hibernate.ddl-auto=create-drop。但是,为什么会出现以下错误?我可以手动插入它。2015-11-2020:53:57.242ERROR7092---[ost-startStop-1]org.hibernate.tool.hbm2ddl.SchemaExport:HHH000388:Unsuccessful:INSERTINTOgender2015-11-202

java - 从 Java 插入到 SQL Server 时,我可以获得类似 "BULK INSERT"的速度吗?

在寻找从Java获取数据到SQLServer的最快方法的过程中,我注意到我能想到的最快的Java方法仍然比使用BULKINSERT慢12倍。我的数据是从Java中生成的,而BULKINSERT只支持从文本文件中读取数据,因此除非我将数据输出到临时文本文件,否则不能使用BULKINSERT。反过来,这当然会对性能造成巨大影响。从Java插入时,插入速度约为每秒2500行。甚至当我在for循环之后和executeBatch之前测量时间时。因此,在内存中“创建”数据不是瓶颈。使用BATCHINSERT插入时,插入速度约为每秒30000行。这两个测试都是在服务器上完成的。所以网络也不是瓶颈。关

java - 当我选择带有 AS 关键字的常量时,PostgreSQL 返回 java.sql.Types.OTHER

当通过java在Postgres上运行选择时SELECT''ASCOL1,0ASCOL2FROMMYTABLE1=2;COL1和COL2的列类型都是Types.OTHER。很明显结果集没有任何行。但是如果我使用下面的查询在结果集中有行:SELECT''ASCOL1,0ASCOL2FROMMYTABLE;COL1的类型仍然是Types.OTHER,但COL2的类型是Types.INTEGER。在我的例子中,我需要Types.VARCHAR和Types.INTEGER甚至结果是否为空。在db层或jdbcurl上是否有任何配置来获取Types.VARCHAR和Types.INTEGER两个查

java - 是否可以将 show_sql 的所有输出放在一个单独的文件中?

在本地开发或运行使用hibernate的springmvc应用程序时,如果我能将所有sql的输出放到一个单独的文件中,那就太好了。这可能吗?我知道有一个hibernate属性show_sql但我相信它会与所有其他log4j日志记录信息混在一起,对吗? 最佳答案 将org.hibernate.SQL类别设置为DEBUG并为其使用特定的附加程序。另见3.5.Logging 关于java-是否可以将show_sql的所有输出放在一个单独的文件中?,我们在StackOverflow上找到一个类似