java - 2个表之间的Quarkus/Hibernate关系

标签 java hibernate quarkus quarkus-panache

我尝试使用数据库创建一个简单的 Web 应用程序。我的数据库只有 2 列:

CREATE TABLE IF NOT EXISTS `Board` (
  `BoardID` Integer NOT NULL AUTO_INCREMENT,
  `Title` Varchar(255),
  `Position` Integer NOT NULL,
  PRIMARY KEY (`BoardID`)
);

CREATE TABLE IF NOT EXISTS `Task` (
  `TaskID` Integer NOT NULL AUTO_INCREMENT,
  `BoardID` Integer NOT NULL,
  `Title` Varchar(255),
  `Description` Varchar (1000),
  PRIMARY KEY (`TaskID`),
  FOREIGN KEY (`BoardID`)
  REFERENCES Board(`BoardID`)
);

楷模 :
@Entity
public class Task extends PanacheEntity {

    @Column(name = "TaskID")
    private Long taskId;

    @ManyToOne (fetch = FetchType.LAZY)
    @JoinColumn(name = "BoardID")
    private Board board;
...
}
@Entity
public class Board extends PanacheEntity{

    @Column(name = "BoardID")
    private Long boardId;

    @OneToMany(mappedBy = "board", orphanRemoval = true)
    private Set<Task> task;
...
}

我的 REST 方法
@Path("/hello")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class ExampleResource {

    @Inject
    BoardRepository boardRepository;

    @GET
    @Transactional
    public List<Board> getAll() {
        return boardRepository.listAll();
    }
}

我的代码正在编译,但是当我调用 REST 方法时,我收到错误:
enter image description here

请帮助我做错了什么

最佳答案

查看PanacheEntity的代码.来自 JavaDoc:

Represents an entity with a generated ID field {@link #id} of type {@link Long}. If your Hibernate entities extend this class they gain the ID field and auto-generated accessors to all their public fields (unless annotated with {@link Transient}), as well as all the useful methods from {@link PanacheEntityBase}.

If you want a custom ID type or strategy, you can directly extend {@link PanacheEntityBase} instead, and write your own ID field. You will still get auto-generated accessors and all the useful methods.



从这里复制的 JavaDoc:https://github.com/quarkusio/quarkus/blob/master/extensions/panache/hibernate-orm-panache/runtime/src/main/java/io/quarkus/hibernate/orm/panache/PanacheEntity.java

您的 id 列没有名称“id”。所以你应该使用 PanacheEntityBase相反,您必须更改实体并添加 @Id对您的 id 字段进行注释:
@Entity
public class Task extends PanacheEntityBase {

    @Id
    @Column(name = "TaskID")
    private Long taskId;

    @ManyToOne (fetch = FetchType.LAZY)
    @JoinColumn(name = "BoardID")
    private Board board;
...
}
@Entity
public class Board extends PanacheEntityBase {

    @Id
    @Column(name = "BoardID")
    private Long boardId;

    @OneToMany(mappedBy = "board", orphanRemoval = true)
    private Set<Task> task;
...
}

如果您想使用 PanacheEntity作为您的基类,您必须更改数据库中的列名并从实体中删除 taskId 和 boardId。

关于java - 2个表之间的Quarkus/Hibernate关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62044827/

相关文章:

java - 具有 Sum 函数的 Spring 规范

java - Hibernate 逆向工程从数据库表生成带注释的 POJO 类

java - 如何使用 Quarkus 解决 Infinispan JCache 拦截器中的异常 "Interceptor has no bindings"?

quarkus - 部署 Quarkus 应用程序有哪些不同方法?

cdi - 如何解析 Quarkus 中的多模块类路径 bean?

java - 访问循环中返回的对象

java - 用 Java 下载整个 FTP 目录 (Apache Net Commons)

java - Hudson 无法启动从属设备 - hudson-slave.exe 未被复制

java - 如何在 HQL 中获取已删除的行数

spring - 没有将Spring DAO注入(inject)JSF管理的bean中