标签: jooq

jOOQ在<daos>标志设置为true时不生成DAO

我已经刷新了我的项目,干净地重建了它,用Google搜索/搜索了StackOverflow以查找类似问题,阅读了jOOQ文档,检查了构建输出是否存在潜在问题等.

<daos>在我的pom.xml中添加了一个标志来生成jOOQ数据库访问对象,因为jOOQ 3.2.0在线手册说 "可以使用daos标志激活DAO生成".根据jOOQ Advanced Codegen 文档将此标志设置为true,不仅会生成DAO,还会生成关系,记录和POJO:

<generator>
    ...
    <generate>
        <daos>true</daos>
    </generate>   
</generator>
Run Code Online (Sandbox Code Playgroud)

在将标志添加到我的pom之前,我有自动生成的记录和关系,但既没有POJO也没有DAO.添加daos标志并重建我的项目后,我还有POJO加上另外两个,但我仍然没有任何DAO.附带的屏幕截图显示了我生成的类.标志添加的类位于蓝色框中.我认为应该有一个名为"daos"的包,包含PurchaseDAO和UserDAO类.

jOOQ DAO 文档没有解释添加标志但未生成DAO的任何情况.该项目的部分重点是学习jOOQ,因此使用jOOQ类手动编码DAO无法解决我的问题.

编辑:我的SQLite从工作3.7.11模式和非工作的解决方案是在这里.

java sql eclipse sqlite jooq

7
推荐指数
1
解决办法
2630
查看次数

如何在jooq中管理DSLContext?(关闭连接)

这就是我实现我想要的每个jooq查询的方法.

UtilClass{

 //one per table more or less
 static void methodA(){

  //my method
  Connection con = MySQLConnection.getConexion(); //open
  DSLContext create = DSL.using(con, SQLDialect.MYSQL); //open

  /* my logic and jooq querys */ //The code !!!!!!!

  try {

    if ( con != null )
       con.close(); //close
  } catch (SQLException e) {

  } //close

  con=null; //close
  create=null; //close
 }
}
Run Code Online (Sandbox Code Playgroud)

我在这里过度工作吗?/保持上下文和连接打开是否安全?

如果保持打开是安全的,我宁愿使用1个静态字段DSLContext per UtilClass(并且只有评论的部分将在我的方法上).我将为每个UtilClass打开一个连接,因为我封装了每个表的方法(或多或少).

java jooq

7
推荐指数
1
解决办法
5397
查看次数

jooq单一查询与一对多关系

我有一个表格实验和一个表格标签.一个实验可能有许多标签.模式:

--------                  --------
|Table1|  1           n   |Table2|
|      | <--------------> |      |
|      |                  |      |
--------                  --------
(experiment)              (tags)
Run Code Online (Sandbox Code Playgroud)

是否可以使用jooq创建查询,返回实验和相应的标记列表.类似于结果,其中Record是一个experimentRecord,一个标签列表或一个地图.

我也有一个只返回一个结果的查询,那里有什么方便吗?

编辑:java8,最新的jooq.

java mysql sql jooq

7
推荐指数
1
解决办法
3477
查看次数

使用jOOQ 3.6 +,纯SQL和javac编译器进行慢速编译

jOOQ用户组报告了以下错误.它似乎是javac编译器中的一个错误,它与编译器在使用内部DSL(如jOOQ)的上下文中完成的"复杂"类型推理工作有关.

鉴于bug的一般性质,我在Stack Overflow上记录它,以便其他人帮助应用变通方法.在高层次上,由于JEP 101:广义目标类型推断,它似乎是编译器性能回归,它是在Java 8中引入的,并且在过去已经引起了1-2个问题.

使用Maven和jOOQ 3.7在Windows上使用jdk 1.8.0_60或1.8.0_66编译以下相对无害的类大约需要20秒:

import static org.jooq.impl.DSL.field;

import org.jooq.SQLDialect;
import org.jooq.impl.DSL;

public class Test {
    public void method() {
        DSL.using(SQLDialect.MYSQL)
           .select()
           .where(DSL.trueCondition())
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
        ;
    }
}
Run Code Online (Sandbox Code Playgroud)

pom.xml中:

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>compilation-issues</groupId>
    <artifactId>compilation-issues</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.jooq</groupId>
            <artifactId>jooq</artifactId>
            <version>3.7.1</version>
        </dependency>
    </dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)

未出现此问题时的配置:

  • 使用jOOQ …

java compilation jooq java-8

7
推荐指数
1
解决办法
1626
查看次数

JOOQ Maven插件NullPointerException

我如何解决我使用jooq-maven-plugin 3.7.3,Maven 3.3.9,Java 1.8.0_51和OS X 10.10.4获得的NullPointerException?

[错误]未能执行目标org.jooq:jooq-CODEGEN-行家:3.7.3:生成(默认CLI)项目我-应用程序:错误运行jOOQ代码生成工具:NullPointerException异常 - > [求助1] org.apache .maven.lifecycle.LifecycleExecutionException:无法执行目标org.jooq:jooq-codegen-maven:3.7.3:在项目my-app上生成(default-cli):在org.apache.maven上运行jOOQ代码生成工具时出错. org.apache.maven.life.internal.MojoExecutor.execute中的org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)中的lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212) MojoExecutor.java:145)org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)at org .apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)在org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)org.apache.maven.maven.DefaultMaven.doExecute(DefaultMaven.java:307)org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)atg.apache.maven .defaultMaven.execute(DefaultMaven.java:106)org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)at at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.委托在org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)的orgkeAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)atg.cathaus.plexus.invoke(Method.java:497) .codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)位于org.codehaus.plexus.classworlds.l的org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)auncher.Launcher.main(Launcher.java:356)引起:org.apache.maven.plugin.MojoExecutionException:在org.jooq.util.maven.Plugin.execute(Plugin.java:134)上运行jOOQ代码生成工具时出错在org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)... 20更多引起:java. org.jooq.util.maven.Plugin.execute(Plugin.java:118)的lang.NullPointerException ... 22更多

根据Github上的代码,抛出NPE的线是

String dir = generator.getTarget().getDirectory();
Run Code Online (Sandbox Code Playgroud)

我在下面配置的目标目录确实存在,我尝试了相对路径和绝对路径以及不使用属性来设置它.

<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.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-app</name>
  <url>http://maven.apache.org</url>

  <properties>
    <db>myappdb</db>
    <db.driver>com.mysql.jdbc.Driver</db.driver>
    <db.jdbc>jdbc:mysql://localhost</db.jdbc>
    <db.url>${db.jdbc}/${db}</db.url>
    <db.user>root</db.user>
    <db.pass>rootpass</db.pass>

    <jaxb-api.version>2.2.6</jaxb-api.version>
    <jooq.version>3.7.3</jooq.version>
    <jooq.dialect>org.jooq.util.mysql.MySQLDatabase</jooq.dialect>
    <jooq.gen.directory>target</jooq.gen.directory>
    <jooq.gen.package>com.mycompany.app.jooq</jooq.gen.package>
    <junit.version>3.8.1</junit.version>
    <mysql.driver.version>5.1.38</mysql.driver.version>
  </properties>

  <build>

    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.jooq</groupId>
          <artifactId>jooq-codegen-maven</artifactId>
          <version>${jooq.version}</version>
          <executions>

            <execution>
              <id>jooq-generate</id>
              <phase>generate-sources</phase>
              <goals>
                <goal>generate</goal>
              </goals>
              <configuration> …
Run Code Online (Sandbox Code Playgroud)

maven jooq

7
推荐指数
0
解决办法
746
查看次数

如何在JOOQ中编写OPTIONAL where子句

List<MyTable> result = DSL.using(configuration())
                .select()
                .from(MY_TABLE)
                .where(MY_TABLE.ID1.equal(pk_id1))
                        .and(MY_TABLE.ID2.equal(fk_id2))
                        .and(MY_TABLE.ID3.equal(fk_id3))
                .orderBy(MY_TABLE.ID.asc())
                .limit(limit)
                .fetchInto(MY_TABLE)
                .map(mapper());
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一些代码,允许我的查询采用三个可选的id,例如我希望查询最终成为

select * from my_table where ID1=5 and ID2=6 and ID3=7 .... etc 
Run Code Online (Sandbox Code Playgroud)

但是,我还想选择能够排除任何id

select * from my_table where ID2=6 and ID3=7 
Run Code Online (Sandbox Code Playgroud)

要么

select * from my_table where ID3=7
Run Code Online (Sandbox Code Playgroud)

这个问题是第一个"where"子句属于id 1,其余的是ands所以如果我做了一个if语句并且我删除了那里然后我会留下

List<MyTable> result = DSL.using(configuration())
                .select()
                .from(MY_TABLE)
                        .and(MY_TABLE.ID2.equal(fk_id2))
                        .and(MY_TABLE.ID3.equal(fk_id3))
                .orderBy(MY_TABLE.ID.asc())
                .limit(limit)
                .fetchInto(MY_TABLE)
                .map(mapper());
Run Code Online (Sandbox Code Playgroud)

它不会起作用.

我试图寻找类似于where id = **are essentianlly没有过滤器的东西,但我找不到那样的东西.

jooq java-8

7
推荐指数
1
解决办法
2648
查看次数

如何使用jOOQ创建SELECT EXISTS(子查询)?

我想用jOOQ构建和执行这样的查询.

SELECT EXISTS( subquery )
Run Code Online (Sandbox Code Playgroud)

举个例子:

SELECT EXISTS(SELECT 1 FROM icona_etiqueta WHERE pvp IS NULL AND unitat_venda = 'GRAMS')
Run Code Online (Sandbox Code Playgroud)

我该怎么做?可以吗?

sql mariadb jooq

7
推荐指数
2
解决办法
3357
查看次数

jooq-codegen-maven插件和JDK9编译错误

我刚刚将我的项目表单JDK8升级到JDK9.我使用JOOQ库版本3.9.5.我现在在编译时看到这个错误.

[ERROR] Failed to execute goal org.jooq:jooq-codegen-maven:3.9.5:generate (default) on project myproject-db-model: Execution default of goal org.jooq:jooq-codegen-maven:3.9.5:generate failed: A required class was missing while executing org.jooq:jooq-codegen-maven:3.9.5:generate: javax/xml/bind/JAXB
[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>org.jooq:jooq-codegen-maven:3.9.5
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/Users/jeanvaljean/.m2/repository/org/jooq/jooq-codegen-maven/3.9.5/jooq-codegen-maven-3.9.5.jar
[ERROR] urls[1] = file:/Users/jeanvaljean/.m2/repository/org/postgresql/postgresql/42.1.1/postgresql-42.1.1.jar
[ERROR] urls[2] = file:/Users/jeanvaljean/Workspace/MyProjects/myproject/model/dbms-strategies/target/myproject-dbms-strategies-0.2.0-SNAPSHOT.jar
[ERROR] urls[3] = file:/Users/jeanvaljean/.m2/repository/org/springframework/boot/spring-boot-starter-data-jpa/1.5.7.RELEASE/spring-boot-starter-data-jpa-1.5.7.RELEASE.jar
[ERROR] urls[4] = file:/Users/jeanvaljean/.m2/repository/org/springframework/boot/spring-boot-starter/1.5.7.RELEASE/spring-boot-starter-1.5.7.RELEASE.jar
[ERROR] urls[5] = file:/Users/jeanvaljean/.m2/repository/org/springframework/boot/spring-boot/1.5.7.RELEASE/spring-boot-1.5.7.RELEASE.jar
[ERROR] urls[6] = file:/Users/jeanvaljean/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/1.5.7.RELEASE/spring-boot-autoconfigure-1.5.7.RELEASE.jar
[ERROR] urls[7] = file:/Users/jeanvaljean/.m2/repository/org/springframework/boot/spring-boot-starter-logging/1.5.7.RELEASE/spring-boot-starter-logging-1.5.7.RELEASE.jar
[ERROR] urls[8] = file:/Users/jeanvaljean/.m2/repository/ch/qos/logback/logback-classic/1.1.11/logback-classic-1.1.11.jar
[ERROR] urls[9] = file:/Users/jeanvaljean/.m2/repository/ch/qos/logback/logback-core/1.1.11/logback-core-1.1.11.jar
[ERROR] urls[10] = file:/Users/jeanvaljean/.m2/repository/org/slf4j/log4j-over-slf4j/1.7.25/log4j-over-slf4j-1.7.25.jar …
Run Code Online (Sandbox Code Playgroud)

maven jooq java-9

7
推荐指数
2
解决办法
1670
查看次数

如何用jOOQ表示"选择别名.*,otherAlias.Column From .."

我试图使用jOOQ动态构建查询.到目前为止它确实很顺利,但现在我偶然发现了一个我似乎无法表达的案例.

这是我想要生成的查询的简化版本:

Select alias.*, otherAlias.aColumn as aAlias  
From table as alias
inner join otherTable as otherAlias
on alias.someColumn = otherAlias.someOtherColumn
Where otherAlias.someOtherColumn in (????????)
Run Code Online (Sandbox Code Playgroud)

我的问题是我似乎无法表达我需要它的SELECT部分.如果我只是使用:

.select() -> I get select *
.select(alias.fields()) -> I get Select *
.select((alias.fields() :+ field(name(otherAlias, aColumn)).as(aAlias)):_*) -> I get Select otherAlias.aColumn as aAlias
Run Code Online (Sandbox Code Playgroud)

有没有办法用jOOQ表达这个?

声明的其余部分似乎按预期工作.我现在在Scala中使用jOOQ 3.10.7并且目标是Postgres,我的声明目前看起来像这样:

sql
   .select()
   .from(alias)
   .innerJoin(otherAlias)
   .on(field(name(alias, someColumn)).eq(field(name(otherAlias, someOtherColumn))))
.where(condition)
Run Code Online (Sandbox Code Playgroud)

非常感谢.

更新:我找到了一种方法来表达这种似乎通过回退到纯SQL的方式.但我仍然想知道是否有更好的方式来表达这一点.这作为选择:

 .select((field(""""Alias".*"""), field(name(otherAlias, aColumn)).as(aAlias)):_*) -> I get Select "Alias".*, otherAlias.aColumn as aAlias
Run Code Online (Sandbox Code Playgroud)

sql postgresql scala jooq

7
推荐指数
1
解决办法
293
查看次数

如何在jooq中仅按日期(没有时间)进行比较?

我有 type 的列timestamp with time zone。该表包含以下值“2022-06-30 22:56:29.183764 +00:00”。我想做一个仅限日期的搜索。

如何在jooq中仅按日期(没有时间)进行比较?

我已经尝试过这个,但它不起作用。

.where(MY_TABLE.UPDATED_AT.cast(LocalDate::class.java).eq(cashDate))
Run Code Online (Sandbox Code Playgroud)

在哪里cashDate = "2022-06-30"

java sql time jooq kotlin

7
推荐指数
1
解决办法
637
查看次数

标签 统计

jooq ×10

java ×5

sql ×5

java-8 ×2

maven ×2

compilation ×1

eclipse ×1

java-9 ×1

kotlin ×1

mariadb ×1

mysql ×1

postgresql ×1

scala ×1

sqlite ×1

time ×1