У меня возникла проблема: возникла ошибка. Ошибка при создании компонента с именем «entityManagerFactory».
ERROR LocalContainerEntityManagerFactoryBean.buildNativeEntityManagerFactory:426 - Failed to initialize JPA EntityManagerFactory: Column mappings for property 'null' mix nullable with 'not null'
2024-12-23 07:33:37.207 ERROR SpringApplication.reportFailure:824 - Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Column mappings for property 'null' mix nullable with 'not null'
Я пытался проверить базу данных и модель, которая имеет ненулевое значение
Вот мой сценарий для SQL
-- Create TEMP_PROJECT_WBS_SESSION table
CREATE TABLE IF NOT EXISTS temp_project_wbs_session (
session_id serial4 PRIMARY KEY,
project_wbs_id INT NOT NULL,
user_id BIGINT NOT NULL,
status VARCHAR(255),
FOREIGN KEY (project_wbs_id) REFERENCES project_wbs(id) ON DELETE CASCADE
);
-- Create TEMP_PROJECT_WBS table
CREATE TABLE IF NOT EXISTS temp_project_wbs (
id BIGINT NOT NULL,
session_id INT NOT NULL,
project_id INT NOT NULL,
status VARCHAR(255),
PRIMARY KEY (id, session_id),
FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE
);
-- Create TEMP_PROJECT_WBS_TABS table
CREATE TABLE IF NOT EXISTS temp_project_wbs_tabs (
id BIGINT NOT NULL,
session_id INT NOT NULL,
temp_project_wbs_id INT NOT NULL,
temp_parent_tabs_id INT,
tab_name VARCHAR(255) NOT NULL,
order_no INT NOT NULL,
level INT NOT NULL,
PRIMARY KEY (id, session_id),
FOREIGN KEY (temp_project_wbs_id, session_id) REFERENCES temp_project_wbs(id, session_id) ON DELETE CASCADE,
FOREIGN KEY (temp_parent_tabs_id, session_id) REFERENCES temp_project_wbs_tabs(id, session_id) ON DELETE CASCADE
);
-- Create TEMP_PROJECT_WBS_TASK table
CREATE TABLE IF NOT EXISTS temp_project_wbs_task (
id BIGINT NOT NULL,
session_id INT NOT NULL,
project_id INT NOT NULL,
temp_project_wbs_tabs_id INT NOT NULL,
temp_project_wbs_parent_task_id INT,
name VARCHAR(255) NOT NULL,
period INT,
order_no INT,
start_date DATE,
end_date DATE,
description TEXT,
type VARCHAR(50),
level INT,
PRIMARY KEY (id, session_id),
FOREIGN KEY (temp_project_wbs_tabs_id, session_id) REFERENCES temp_project_wbs_tabs(id, session_id) ON DELETE CASCADE,
FOREIGN KEY (temp_project_wbs_parent_task_id, session_id) REFERENCES temp_project_wbs_task(id, session_id) ON DELETE CASCADE,
FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE
);
-- Create TEMP_PROJECT_WBS_TASK_LINK table
CREATE TABLE IF NOT EXISTS temp_project_wbs_task_link (
id BIGINT NOT NULL,
session_id INT NOT NULL,
temp_project_wbs_id INT NOT NULL,
temp_project_wbs_task_id INT NOT NULL,
task_id INT NOT NULL,
type VARCHAR(50),
PRIMARY KEY (id, session_id),
FOREIGN KEY (temp_project_wbs_id, session_id) REFERENCES temp_project_wbs(id, session_id) ON DELETE CASCADE,
FOREIGN KEY (temp_project_wbs_task_id, session_id) REFERENCES temp_project_wbs_task(id, session_id) ON DELETE CASCADE,
FOREIGN KEY (task_id, session_id) REFERENCES temp_project_wbs_task(id, session_id) ON DELETE CASCADE
);
-- Create TEMP_PROJECT_WBS_TASK_OUTPUT table
CREATE TABLE IF NOT EXISTS temp_project_wbs_task_output (
id BIGINT NOT NULL,
session_id INT NOT NULL,
temp_project_wbs_id INT NOT NULL,
temp_project_wbs_task_id INT NOT NULL,
standard_output_id INT,
type VARCHAR(50),
product_name VARCHAR(255),
PRIMARY KEY (id, session_id),
FOREIGN KEY (temp_project_wbs_id, session_id) REFERENCES temp_project_wbs(id, session_id) ON DELETE CASCADE,
FOREIGN KEY (temp_project_wbs_task_id, session_id) REFERENCES temp_project_wbs_task(id, session_id) ON DELETE CASCADE
);
-- Create TEMP_PROJECT_WBS_TASK_PIC table
CREATE TABLE IF NOT EXISTS temp_project_wbs_task_pic (
id BIGINT NOT NULL,
session_id INT NOT NULL,
temp_project_wbs_task_id INT NOT NULL,
user_id INT,
rate INT,
PRIMARY KEY (id, session_id),
FOREIGN KEY (temp_project_wbs_task_id, session_id) REFERENCES temp_project_wbs_task(id, session_id) ON DELETE CASCADE
);
Вот встроенный идентификатор моей модели
@Setter
@Getter
@Embeddable
public class TempPrimaryKey {
@Column(name = "id", nullable = false)
private BigInteger id; //mainId
@Column(name = "session_id", nullable = false)
private Integer sessionId;
// Default constructor
public TempPrimaryKey() {}
// Constructor
public TempPrimaryKey(BigInteger id, Integer sessionId) {
this.id = id;
this.sessionId = sessionId;
}
// Override equals() and hashCode()
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TempPrimaryKey that = (TempPrimaryKey) o;
return Objects.equals(id, that.id) && Objects.equals(sessionId, that.sessionId);
}
@Override
public int hashCode() {
return Objects.hash(id, sessionId);
}
}
Вот это для WbsSession
@Getter
@Setter
@Entity
@Table(name = "temp_project_wbs_session")
public class TempProjectWbsSession extends BaseEntity {
public static final String NEW_STATUS = "NEW";
public static final String EDIT_STATUS = "EDIT";
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "session_id", nullable = false)
private Integer id;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "project_wbs_id", nullable = false)
private ProjectWbs projectWbs;
@JoinColumn(name = "user_id", nullable = false)
private Integer userId;
@Size(max = 255)
@Column(name = "status")
private String status;
}
Вот это для Wbs
@Getter
@Setter
@Entity
@Table(name = "temp_project_wbs")
public class TempProjectWbs extends BaseEntity {
@EmbeddedId
private TempPrimaryKey id;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "project_id", nullable = false)
private Project project;
@Size(max = 255)
@Column(name = "status")
private String status;
@JsonIgnore
@OneToMany(mappedBy = "tempProjectWbs")
@OrderBy("level ASC, orderNo ASC")
private List tempProjectWbsTabs = new ArrayList();
}
Вот это для WbsTab
@Getter
@Setter
@Entity
@Table(name = "temp_project_wbs_tabs")
public class TempProjectWbsTab extends BaseEntity {
@EmbeddedId
private TempPrimaryKey id;
@JsonIgnore
@ManyToOne
@JoinColumns({
@JoinColumn(name = "temp_project_wbs_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "session_id", referencedColumnName = "session_id", nullable = false)
})
private TempProjectWbs tempProjectWbs;
@Column(name = "tab_name", nullable = false)
private String name;
@Column(name = "order_no", nullable = false)
private Integer orderNo;
@Column(name = "level", nullable = false)
private Integer level;
@JsonIgnore
@ManyToOne
@JoinColumns({
@JoinColumn(name = "temp_parent_tabs_id", referencedColumnName = "id"),
@JoinColumn(name = "session_id", referencedColumnName = "session_id", nullable = false)
})
private TempProjectWbsTab tempParentTabs;
@OneToMany(mappedBy = "tempParentTabs")
@OrderBy("orderNo ASC")
private List childs = new ArrayList();
@JsonIgnore
@OneToMany(mappedBy = "tempProjectWbsTab")
@OrderBy("level ASC, orderNo ASC")
private List tasks = new ArrayList();
}
Вот это для задачи
@Getter
@Setter
@Entity
@Table(name = "temp_project_wbs_task")
публичный класс TempProjectWbsTask расширяет BaseEntity {
публичная статическая финальная строка TYPE_TASK = "TASK";
публичная статическая финальная строка TYPE_TAB = "TAB";
публичная статическая финальная строка TYPE_ACTIVITY = "ACTIVITY";
@EmbeddedId
private TempPrimaryKey id;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "project_id", nullable = false)
private Project project;
@JsonIgnore
@ManyToOne
@JoinColumns({
@JoinColumn(name = "temp_project_wbs_tabs_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "session_id", referencedColumnName = "session_id", nullable = false)
})
private TempProjectWbsTab tempProjectWbsTab;
@Size(max = 255)
@NotNull
@Column(name = "name", nullable = false)
private String name;
@Column(name = "period")
private Integer period = 0;
@Column(name = "order_no")
private Integer orderNo;
@Column(name = "start_date")
private LocalDate startDate;
@Column(name = "end_date")
private LocalDate endDate;
@Column(name = "description", length = Integer.MAX_VALUE)
private String description;
@Size(max = 50)
@Column(name = "type", length = 50)
private String type;
@Column(name = "level")
private Integer level;
@JsonIgnore
@ManyToOne
@JoinColumns({
@JoinColumn(name = "temp_project_wbs_parent_task_id", referencedColumnName = "id"),
@JoinColumn(name = "session_id", referencedColumnName = "session_id", nullable = false)
})
private TempProjectWbsTask tempProjectWbsParentTask;
@JsonIgnore
@OneToMany(mappedBy = "tempProjectWbsParentTask")
@OrderBy("orderNo ASC")
private List childs = new ArrayList();
@JsonIgnore
@OneToMany(mappedBy = "tempProjectWbsTask", fetch = FetchType.LAZY)
private List tempProjectWbsTaskLinker = new ArrayList();
@JsonIgnore
@OneToMany(mappedBy = "tempProjectWbsTask", fetch = FetchType.LAZY)
private List tempProjectWbsTaskOutputs = new ArrayList();
@JsonIgnore
@OneToMany(mappedBy = "tempProjectWbsTask", fetch = FetchType.LAZY)
private List tempProjectWbsPics = new ArrayList();
public LocalDate getStartDate() {
if (TYPE_TASK.equals(this.type))
return this.startDate;
return this.childs.stream()
.map(TempProjectWbsTask::getStartDate)
.filter(Objects::nonNull)
.min(LocalDate::compareTo)
.orElse(this.startDate);
}
public LocalDate getEndDate() {
if (TYPE_TASK.equals(this.type))
return this.endDate;
return this.childs.stream()
.map(TempProjectWbsTask::getEndDate)
.filter(Objects::nonNull)
.max(LocalDate::compareTo)
.orElse(this.endDate);
}
public String getTaskCode() {
if (this.tempProjectWbsParentTask == null) {
return String.valueOf(this.orderNo);
} else {
return this.tempProjectWbsParentTask.getTaskCode() + "." + this.orderNo;
}
}
}
Вот это для TaskLink
@Getter
@Setter
@Entity
@Table(name = "temp_project_wbs_task_link")
public class TempProjectWbsTaskLink extends BaseEntity {
@EmbeddedId
private TempPrimaryKey id;
@JsonIgnore
@ManyToOne
@JoinColumns({
@JoinColumn(name = "temp_project_wbs_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "session_id", referencedColumnName = "session_id", nullable = false)
})
private TempProjectWbs tempProjectWbs;
@ManyToOne
@JoinColumns({
@JoinColumn(name = "temp_project_wbs_task_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "session_id", referencedColumnName = "session_id", nullable = false)
})
private TempProjectWbsTask tempProjectWbsTask; //projectWbsTask -> linkedTo task (FS, FF, SS, SF)
@ManyToOne
@JoinColumns({
@JoinColumn(name = "task_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "session_id", referencedColumnName = "session_id", nullable = false),
})
private TempProjectWbsTask task;
@Size(max = 50)
@Column(name = "type", length = 50)
private String type;
}
Вот это для TaskOutput
@Getter
@Setter
@Entity
@Table(name = "temp_project_wbs_task_output")
public class TempProjectWbsTaskOutput extends BaseEntity {
@EmbeddedId
private TempPrimaryKey id;
@JsonIgnore
@ManyToOne
@JoinColumns({
@JoinColumn(name = "temp_project_wbs_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "session_id", referencedColumnName = "session_id", insertable = false, updatable = false)
})
private TempProjectWbs tempProjectWbs;
@ManyToOne
@JoinColumns({
@JoinColumn(name = "temp_project_wbs_task_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "session_id", referencedColumnName = "session_id", nullable = false)
})
private TempProjectWbsTask tempProjectWbsTask;
@ManyToOne
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinColumn(name = "standard_output_id", nullable = false)
private StandardOutputView standardOutput;
@Size(max = 50)
@Column(name = "type", length = 50)
private String type;
@Size(max = 255)
@Column(name = "product_name")
private String outputName;
}
Вот это для TaskPic
@Getter
@Setter
@Entity
@Table(name = "temp_project_wbs_task_pic")
public class TempProjectWbsTaskPic extends BaseEntity {
public static final String TYPE_PM = "TYPEPM";
public static final String TYPE_INDIVIDUAL_ASSIGNEE = "TYPEINDIVIDUAL";
public static final String TYPE_BY_ROLE = "TYPEROLE";
@EmbeddedId
private TempPrimaryKey id;
@ManyToOne
@JoinColumns({
@JoinColumn(name = "temp_project_wbs_task_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "session_id", referencedColumnName = "session_id", nullable = false)
})
private TempProjectWbsTask tempProjectWbsTask;
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
private UserView user;
@Column(name = "rate")
private Integer rate;
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... embeddedid
Ошибка создания bean-компонента с именем «entityManagerFactory» с EmbeddedId ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Ошибка создания bean-компонента с именем «entityManagerFactory» с EmbeddedId
Anonymous » » в форуме JAVA - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Ошибка создания bean-компонента с именем 'entityManagerFactory', ошибка весенней загрузки
Anonymous » » в форуме JAVA - 0 Ответы
- 25 Просмотры
-
Последнее сообщение Anonymous
-