Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在实体映射中,序列的增量大小设置为[50],而关联的数据库序列增量大小为[1]_Java_Spring_Hibernate_Spring Boot_Spring Mvc - Fatal编程技术网

Java 在实体映射中,序列的增量大小设置为[50],而关联的数据库序列增量大小为[1]

Java 在实体映射中,序列的增量大小设置为[50],而关联的数据库序列增量大小为[1],java,spring,hibernate,spring-boot,spring-mvc,Java,Spring,Hibernate,Spring Boot,Spring Mvc,我正在udemy上关注LearnSpring5等,我正在测试我们的应用程序。到目前为止,一切都很顺利,我能够连接到postgreSQL数据库,但现在我被困在这个测试中,两天以来一直失败 我不明白是什么导致考试不及格。应用程序已运行,但测试未运行。这里是测试类: package com.ghevi.dao; 导入com.ghevi.pma.projectmanagement应用程序; 导入com.ghevi.pma.dao.ProjectRepository; 导入com.ghevi.pma.en

我正在udemy上关注LearnSpring5等,我正在测试我们的应用程序。到目前为止,一切都很顺利,我能够连接到postgreSQL数据库,但现在我被困在这个测试中,两天以来一直失败

我不明白是什么导致考试不及格。应用程序已运行,但测试未运行。这里是测试类:

package com.ghevi.dao;
导入com.ghevi.pma.projectmanagement应用程序;
导入com.ghevi.pma.dao.ProjectRepository;
导入com.ghevi.pma.entities.Project;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
导入org.springframework.test.context.ContextConfiguration;
导入org.springframework.test.context.jdbc.Sql;
导入org.springframework.test.context.jdbc.SqlGroup;
导入org.springframework.test.context.junit4.SpringRunner;
导入静态org.junit.Assert.assertEquals;
@ContextConfiguration(类=ProjectManagementApplication.class)
@RunWith(SpringRunner.class)
@DataJpaTest//用于h2等临时数据库
@SqlGroup({
@Sql(executionPhase=Sql.executionPhase.BEFORE\u TEST\u方法,scripts={“classpath:schema.Sql”,“classpath:data.Sql”}),
@Sql(executionPhase=Sql.executionPhase.AFTER\u TEST\u方法,scripts=“classpath:drop.Sql”)
})
公共类ProjectRepositoryIntegrationTest{
@自动连线
proRepo项目库;
@试验
如果newprojectsaved\u thensucsuccess()则为public void{
项目newProject=新项目(“新测试项目”、“完成”、“测试说明”);
项目报告保存(新项目);
资产质量(5,proRepo.findAll().size());
}
}
这是堆栈跟踪:

Employee类(不要介意这些评论,它们可能是垃圾):

package com.ghevi.pma.entities;
导入javax.persistence.*;
导入java.util.List;
@实体
公营雇员{
@身份证
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator=“employee_seq”)//对于类projmanagapplication(注释掉的部分)中的数据插入,IDENTITY让hibernate使用数据库id计数器。
private long employeeId;//IDENTITY的缺点是,如果我们批量处理大量员工或项目,更新他们的速度会慢得多,我们现在使用SEQUENCE,因为我们有schema.sql(spring会批量更新)
私有字符串名;
私有字符串lastName;
私人字符串电子邮件;
//@manytone可以为一个项目分配多个员工
//Cascade,查询在项目上完成,也在子实体上完成
@ManyToMany(cascade={CascadeType.DETACH,CascadeType.MERGE,CascadeType.REFRESH,CascadeType.PERSIST},//行业标准,不要使用删除(如果删除项目也删除子项)或全部(因为包含删除)
fetch=FetchType.LAZY)//LAZY是行业标准,它将项目加载到内存中,同时也将关联实体加载到内存中,因此它会减慢应用程序的速度,因此我们使用LAZY并在以后调用子实体
//@JoinColumn(name=“project\u id”)//外键,在Employee数据库上创建一个新表
@JoinTable(name=“project\u employee”,//使用两个外键合并两个表
joinColumns=@JoinColumn(name=“employee_id”),
inverseJoinColumns=@JoinColumn(name=“project\u id”))
私人清单项目;
公职人员(){
}
公共雇员(字符串firstName、字符串lastName、字符串email){
this.firstName=firstName;
this.lastName=lastName;
this.email=电子邮件;
}
公共列表项目(){
返回项目;
}
公共项目(列出项目){
这个项目=项目;
}
/*替换为列表
公共项目getProject(){
返回项目;
}
公共项目(项目){
this.project=项目;
}
*/
公共长getEmployeeId(){
返回员工ID;
}
公共无效setEmployeeId(长employeeId){
this.employeeId=employeeId;
}
公共字符串getFirstName(){
返回名字;
}
public void setFirstName(字符串firstName){
this.firstName=firstName;
}
公共字符串getLastName(){
返回姓氏;
}
public void setLastName(字符串lastName){
this.lastName=lastName;
}
公共字符串getEmail(){
回复邮件;
}
公用电子邮件(字符串电子邮件){
this.email=电子邮件;
}
}
这也是我引用这些序列的
schema.sql
,因为这个文件是由测试运行的,我刚刚注意到IntelliJ在这个文件中标记了一些错误。例如,它将一些空格和表的T标记为红色,表示:

expected one of the following: EDITIONING FORCE FUNCTION NO OR PACKAGE PROCEDURE SEQUENCE TRIGGER TYPE VIEW identifier
创建序列(如果不存在员工);
如果不存在,则创建表employee()如果不存在,则创建表项目(
项目id BIGINT非空默认nextval(“项目顺序”)主键,
名称VARCHAR(100)不为空,
阶段VARCHAR(100)不为空,
说明VARCHAR(500)不为空
);

创建表如果不存在project_employee(也许,employee实体中的生成器定义有问题。 “生成器”必须是SequenceGenerator的“名称”,而不是序列等其他事物的名称。可能是因为您提供了序列的名称,而没有具有该名称的生成器,因此它使用了默认的预分配,即50


此外,该策略应该是顺序的,但如果您定义了生成器,则该策略不是必需的,它仅在您未定义生成器时才相关。

您从不告诉它有关顺序的信息,而只是生成器的名称

试一试


我也有同样的问题。添加下面的注释解决了它。
@SequenceGenerator(nam)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "employee_generator")
@SequenceGenerator(name = "employee_generator", sequenceName = "employee_seq", allocationSize = 1)