엔티티 매핑에서 시퀀스의 증분 크기는 [50]으로 설정되고 연결된 데이터베이스 시퀀스 증분 크기는 [1]입니다.
저는 Learn Spring 5 등에 대한 연구를 수행하고 있으며, 현재 애플리케이션을 테스트하고 있습니다.지금까지 모든 것이 정상적으로 작동했습니다. 저는 우체국에 연결할 수 있었습니다.SQL 데이터베이스와 모든 것을 제외하고 나는 이틀째 이 시험에 실패하고 있습니다.
무엇이 시험을 실패하게 하는지 이해할 수 없습니다.응용 프로그램은 실행되지만 테스트는 실행되지 않습니다.다음은 테스트 클래스입니다.
package com.ghevi.dao;
import com.ghevi.pma.ProjectManagementApplication;
import com.ghevi.pma.dao.ProjectRepository;
import com.ghevi.pma.entities.Project;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.context.jdbc.SqlGroup;
import org.springframework.test.context.junit4.SpringRunner;
import static org.junit.Assert.assertEquals;
@ContextConfiguration(classes= ProjectManagementApplication.class)
@RunWith(SpringRunner.class)
@DataJpaTest // for temporary databases like h2
@SqlGroup({
@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = {"classpath:schema.sql", "classpath:data.sql"}),
@Sql(executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, scripts = "classpath:drop.sql")
})
public class ProjectRepositoryIntegrationTest {
@Autowired
ProjectRepository proRepo;
@Test
public void ifNewProjectSaved_thenSuccess(){
Project newProject = new Project("New Test Project", "COMPLETE", "Test description");
proRepo.save(newProject);
assertEquals(5, proRepo.findAll().size());
}
}
다음은 스택 추적입니다.
직원 클래스(댓글은 쓰레기일 수 있으므로 신경 쓰지 마십시오.):
package com.ghevi.pma.entities;
import javax.persistence.*;
import java.util.List;
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "employee_seq") // AUTO for data insertion in the class projmanagapplication (the commented out part), IDENTITY let hibernate use the database id counter.
private long employeeId; // The downside of IDENTITY is that if we batch a lot of employees or projects it will be much slower to update them, we use SEQUENCE now that we have schema.sql (spring does batch update)
private String firstName;
private String lastName;
private String email;
// @ManyToOne many employees can be assigned to one project
// Cascade, the query done on projects it's also done on children entities
@ManyToMany(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.PERSIST}, // Standard in the industry, dont use the REMOVE (if delete project delete also children) or ALL (because include REMOVE)
fetch = FetchType.LAZY) // LAZY is industry standard it loads project into memory, EAGER load also associated entities so it slows the app, so we use LAZY and call child entities later
//@JoinColumn(name="project_id") // Foreign key, creates a new table on Employee database
@JoinTable(name = "project_employee", // Merge the two table using two foreign keys
joinColumns = @JoinColumn(name="employee_id"),
inverseJoinColumns = @JoinColumn(name="project_id"))
private List<Project> projects;
public Employee(){
}
public Employee(String firstName, String lastName, String email) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
public List<Project> getProjects() {
return projects;
}
public void setProjects(List<Project> projects) {
this.projects = projects;
}
/* Replaced with List<Project>
public Project getProject() {
return project;
}
public void setProject(Project project) {
this.project = project;
}
*/
public long getEmployeeId() {
return employeeId;
}
public void setEmployeeId(long employeeId) {
this.employeeId = employeeId;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
또한 이것은schema.sql
제가 그 시퀀스들을 참조하는 곳에서, 이 파일이 테스트에 의해 실행되기 때문에, 저는 방금 IntelliJ가 이 파일에서 몇 가지 오류를 표시하는 것을 알아차렸습니다.예를 들어 일부 공백과 TABLE의 T를 표시하여 다음과 같이 말합니다.
expected one of the following: EDITIONING FORCE FUNCTION NO OR PACKAGE PROCEDURE SEQUENCE TRIGGER TYPE VIEW identifier
CREATE SEQUENCE IF NOT EXISTS employee_seq;
CREATE TABLE IF NOT EXISTS employee ( <-- here there is an error " expected: "
employee_id BIGINT NOT NULL DEFAULT nextval('employee_seq') PRIMARY KEY,
email VARCHAR(100) NOT NULL,
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL
);
CREATE SEQUENCE IF NOT EXISTS project_seq;
CREATE (the error i described is here -->) TABLE IF NOT EXISTS project (
project_id BIGINT NOT NULL DEFAULT nextval('project_seq') PRIMARY KEY,
name VARCHAR(100) NOT NULL,
stage VARCHAR(100) NOT NULL,
description VARCHAR(500) NOT NULL
);
CREATE TABLE IF NOT EXISTS project_employee ( <--Here again an error "expected:"
project_id BIGINT REFERENCES project,
employee_id BIGINT REFERENCES employee
);
당신은 절대 시퀀스에 대해 말하지 않습니다. 단지 발전기라고 불리는 것입니다.
해라
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "employee_generator")
@SequenceGenerator(name = "employee_generator", sequenceName = "employee_seq", allocationSize = 1)
저도 같은 문제가 있었습니다.아래 주석을 추가하여 해결되었습니다. @SequenceGenerator(name = "employee_seq", allocationSize = 1)
기본적으로allocationSize
SequenceGenerator의 매개 변수가 50으로 설정되어 있습니다.이 문제는 시퀀스 증분이 일치하지 않을 때 발생합니다.요구 사항에 따라 시퀀스 증분 값을 변경하거나 allocationSize를 할당할 수 있습니다.
직원 엔티티의 제너레이터 정의에 문제가 있을 수 있습니다."제너레이터"는 시퀀스와 같은 다른 이름이 아니라 시퀀스 생성기의 "이름"이어야 합니다.시퀀스 이름을 지정했지만 해당 이름을 가진 제너레이터가 없었기 때문에 기본 사전 할당인 50을 사용했을 수 있습니다.
또한 전략은 SEQUENCE여야 하지만 생성기를 정의하는 경우에는 필요하지 않으며 생성기를 정의하지 않는 경우에만 관련이 있습니다.
언급URL : https://stackoverflow.com/questions/60687826/the-increment-size-of-the-sequence-is-set-to-50-in-the-entity-mapping-while-th
'source' 카테고리의 다른 글
git --git-timeout이 예상대로 작동하지 않습니다. (0) | 2023.07.15 |
---|---|
파이썬에서 주어진 픽셀의 RGB 값을 읽는 방법은 무엇입니까? (0) | 2023.07.15 |
요소가 배열에 있는지 확인하는 방법 (0) | 2023.07.15 |
파이썬 멀티스레드는 모든 스레드가 완료될 때까지 기다립니다. (0) | 2023.07.15 |
com.google.android.gms.common.api에 로그인하지 못했습니다.API 예외: 10: (0) | 2023.07.15 |