Ошибка создания bean-компонента с именем «entityManagerFactory» с EmbeddedIdJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка создания bean-компонента с именем «entityManagerFactory» с EmbeddedId

Сообщение Anonymous »

У меня возникла проблема: возникла ошибка. Ошибка при создании компонента с именем «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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»