我正在尝试创建一个spring mvc应用程序.这是我的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.acme</groupId>
<artifactId>test</artifactId>
<name>springmvc</name>
<packaging>jar</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<repositories>
<repository>
<id>spring-milestone</id>
<url>http://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-milestone</id>
<url>http://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- Logging -->
<dependency> …Run Code Online (Sandbox Code Playgroud) 我有一个带有列名的sql表A.
name, id1, id2, val1
Run Code Online (Sandbox Code Playgroud)
和一个带有列名的表B.
id1, id2, key1, key2
Run Code Online (Sandbox Code Playgroud)
这是我的SQL查询
SELECT
v1.id1,
v1.id2
FROM (
SELECT
A.id1,
A.id2,
min(val1) AS x
FROM A
JOIN B ON A.id1 = B.id1 AND A.id2 = B.id2
GROUP BY A.id1, A.id2
) AS v1
WHERE v1.x > 10
Run Code Online (Sandbox Code Playgroud)
使用DetachedCriteria我能够形成子查询
DetachedCriteria subCriteria = DetachedCriteria.forClass(A_model.class);
subCriteria.createAlias("b", "b_model");
subCriteria.setProjection(Projections.projectionList()
.add(Projections.groupProperty("id1"))
.add(Projections.groupProperty("id2"))
.add(Projections.min("val1"),"x");
Run Code Online (Sandbox Code Playgroud)
但我在创建外部查询时遇到了困难.
任何建议我如何创建上述SQL的标准?
谢谢你的期待.
下面是我偶然发现的一段代码的最小可验证示例.
package test_package;
import java.util.function.Predicate;
public class TestClass {
public static final String CONST_STR = " some_data "+ getMoreData(e -> e.getId()==3);
private static String getMoreData(Predicate<TestEnum> p){
StringBuilder sb = new StringBuilder();
for(TestEnum e : TestEnum.values()){
if(p.test(e)){
sb.append(e.name());
}
}
return sb.toString();
}
public static void main(String[] args) {
System.out.println(CONST_STR);
}
}
enum TestEnum{
OP1(1),OP2(2),OP3(3);
private final int id;
public int getId() {
return id;
}
TestEnum(int id){
this.id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
当我试图编译它给它我
错误:java:java.lang.StackOverflowError
任何人都可以指出我在哪里出错了吗?
我在尝试编译时遇到错误 javac test_package/TestClass.java
该系统资源不足.有关详细信息,请参阅以下堆栈跟踪 com.sun.tools.javac.code.Scope.dupUnshared(Scope.java:144)中的java.lang.StackOverflowError位于com的com.sun.tools.javac.comp.Attr.lambdaEnv(Attr.java:2639).在com.sun.tools.javac的com.sun.tools.javac.tree.JCTree …
这就是我的 plpqsql 函数(Postgres 函数)的样子
CREATE OR REPLACE FUNCTION public.test(my_ids text[]) RETURNS void
LANGUAGE plpgsql AS $function$
BEGIN
RAISE NOTICE '--- Processing data%', my_ids;
END;
$function$;
Run Code Online (Sandbox Code Playgroud)
并像这样执行上面的函数
SELECT test('{"This", "is", "very", "cool"}'::TEXT[]);
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的代码工作正常,但是当我尝试从应用程序的代码中调用此选择查询时,我不知道如何在查询中设置它。下面是我的java代码
String query = "SELECT public.test( ? );";
SQLQuery sqlQuery = session.createSQLQuery(query);
List<String> strList = new ArrayList<>();
strList.add("hello");
strList.add("world");
String[] strParam = strList.toArray(new String[strList.size()]);
sqlQuery.setParameter(1, strParam); // this is not working what shall i use for it ?
sqlQuery.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
所以我在代码注释中提到的问题是如何在查询中设置这个数组。
我可以像这样在 JDBC 中使用它
Array strParam= conn.createArrayOf("varchar", strList.toArray(new String[strList.size()]));
Run Code Online (Sandbox Code Playgroud)
然后使用setArray方法在preparedStatement中设置这个sqlArray! …