Java 两个表之间的Quarkus/Hibernate关系
我尝试用数据库创建一个简单的web应用程序。我的数据库只有两列:Java 两个表之间的Quarkus/Hibernate关系,java,hibernate,quarkus,quarkus-panache,Java,Hibernate,Quarkus,Quarkus Panache,我尝试用数据库创建一个简单的web应用程序。我的数据库只有两列: 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` Int
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;
...
}
@实体
公共类委员会扩大了泛公共性{
@列(name=“BoardID”)
私人长板ID;
@OneToMany(mappedBy=“board”,orphan=true)
私有集任务;
...
}
我的休息方法
@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();
}
}
@Path(“/hello”)
@使用(MediaType.APPLICATION_JSON)
@产生(MediaType.APPLICATION_JSON)
公共类示例资源{
@注入
董事会知识库董事会知识库;
@得到
@交易的
公共列表getAll(){
返回boardRepository.listAll();
}
}
我的代码正在编译,但调用REST方法时收到错误:
请帮帮我,我做错了什么请检查
panacheinty的代码
。从JavaDoc:
表示具有生成的{@link Long}类型的ID字段{@link#ID}的实体。如果您的Hibernate实体扩展了这个类,那么它们将获得ID字段和自动生成的对其所有公共字段的访问器(除非用{@link Transient}注释),以及来自{@link panachEntityBase}的所有有用方法
如果需要自定义ID类型或策略,可以直接扩展{@link panachEntityBase},并编写自己的ID字段。您仍将获得自动生成的访问器和
所有有用的方法
从此处复制的JavaDoc:
您的id列没有名称“id”。因此,您应该改用PanachEntityBase
,您必须更改实体并将@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;
...
}
@实体
公共类板扩展了PanacheEntityBase{
@身份证
@列(name=“BoardID”)
私人长板ID;
@OneToMany(mappedBy=“board”,orphan=true)
私有集任务;
...
}
如果要使用
panachEntity
作为基类,则必须更改数据库中的列名,并从实体中删除taskId和boardId。panachEntity中有什么?使用哪个数据库?您的pojo也用@Entity
注释,我使用MySQL。是的,我在pojo类中使用了带注释的@Entity。@TomStroemer如果我很了解PanachEntity allow use repository,比如CRUDhello,你会帮我进行惰性初始化吗?当我尝试使用Rest方法getAll()时,我收到一个错误,请创建一个新问题。将完整的stacktrace添加为文本,而不是图像。还请共享调用方法的代码以及实体的相关部分。
@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;
...
}