powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate, каскадное удаление.
1 сообщений из 1, страница 1 из 1
Hibernate, каскадное удаление.
    #38994046
DikiiSlon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. У меня такая проблема: не могу понять, что делаю не так, перепробовал кучу разных вариантов настройки каскадного удаления данных из БД. У меня есть 3 таблицы, Person, Task, TaskLog. Person относится к Task как 1 ко многим, Task к TaskLog также 1 ко многим. Мне необходимо, что бы удаление записи из, например, Person, повлекло за собой удаление связанных с ней записей из 2х других таблиц. Запись данных и удаление с самого низа работают нормально, а вот каскадное удаление настроить не получается. При попытке удалить запись из Person, пишет "could not execute statement" Подскажите пожалуйста, что я делаю не так.

Код класса Person:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
package logic;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;



//import org.hibernate.annotations.Cascade;
//import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;

@Entity
@Table(name = "Person")
public class Person {

	private Long id;
	private String name;
	private String login;
	private String password;
	private Set<Task> task = new HashSet<Task>(0);

	@Id
	@GeneratedValue(generator = "increment")
	@GenericGenerator(name = "increment", strategy = "increment")
	@Column(name = "id")
	public Long getId() {
		return id;
	}

	@Column(name = "Name")
	public String getName() {
		return name;
	}

	@Column(name = "Login")
	public String getLogin() {
		return login;
	}

	@Column(name = "Password")
	public String getPassword() {
		return password;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public void setTask(Set<Task> task) {
		this.task = task;
	}

	@OneToMany(targetEntity = logic.Task.class, cascade = { CascadeType.REMOVE }, fetch = FetchType.LAZY)
	@JoinColumn(name = "id")
	public Set<Task> getTask() {
		return task;
	}

}



Код создания таблицы Person:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE `person` (
	`id` BIGINT(20) NOT NULL,
	`Login` VARCHAR(255) NULL DEFAULT NULL,
	`Name` VARCHAR(255) NULL DEFAULT NULL,
	`Password` VARCHAR(255) NULL DEFAULT NULL,
	PRIMARY KEY (`id`)
)
COLLATE='cp1251_general_ci'
ENGINE=MyISAM;




Код класса Task:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
package logic;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;

@Entity
@Table(name = "Task")
public class Task {

	private Long id;
	private String taskName;
	private String personName;
	private Boolean finish;
	private Person person;
	private Set<TaskLog> taskLog = new HashSet<TaskLog>(0);

	@Id
	@GeneratedValue(generator = "increment")
	@GenericGenerator(name = "increment", strategy = "increment")
	@Column(name = "id")
	public Long getId() {
		return id;
	}

	@Column(name = "TaskName")
	public String getTaskName() {
		return taskName;
	}

	@Column(name = "PersonName")
	public String getPersonName() {
		return personName;
	}

	@Column(name = "Finish")
	public Boolean getFinish() {
		return finish;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public void setTaskName(String taskName) {
		this.taskName = taskName;
	}

	public void setPersonName(String personName) {
		this.personName = personName;
	}

	public void setFinish(Boolean finish) {
		this.finish = finish;
	}

	public void setPerson(Person person) {
		this.person = person;
	}

	public void setTaskLog(Set<TaskLog> taskLog) {
		this.taskLog = taskLog;
	}

	@ManyToOne(cascade = { CascadeType.REMOVE }, fetch = FetchType.LAZY)
	@OnDelete(action = OnDeleteAction.CASCADE)
	@JoinColumn(name = "pid")
	public Person getPerson() {
		return person;
	}

	@OneToMany(targetEntity = logic.TaskLog.class, cascade = { CascadeType.REMOVE }, fetch = FetchType.LAZY)
	@JoinColumn(name = "id")
	public Set<TaskLog> getTaskLog() {
		return taskLog;
	}

}



Код создания таблицы Task:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE `task` (
	`id` BIGINT(20) NOT NULL,
	`Finish` BIT(1) NULL DEFAULT NULL,
	`PersonName` VARCHAR(255) NULL DEFAULT NULL,
	`TaskName` VARCHAR(255) NULL DEFAULT NULL,
	`pid` BIGINT(20) NULL DEFAULT NULL,
	PRIMARY KEY (`id`),
	INDEX `FK_5ftc8sl5jmt6a1tyrg20xyou1` (`pid`)
)
COLLATE='cp1251_general_ci'
ENGINE=MyISAM;



Код класса TaskLog:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
package logic;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;

@Entity
@Table(name = "TaskLog")
public class TaskLog {

	private Long id;
	private String taskName;
	private Long time;
	private String comment;
	private Task task;

	@Id
	@GeneratedValue(generator = "increment")
	@GenericGenerator(name = "increment", strategy = "increment")
	@Column(name = "id")
	public Long getId() {
		return id;
	}

	@Column(name = "TaskName")
	public String getTaskName() {
		return taskName;
	}

	@Column(name = "Time")
	public Long getTime() {
		return time;
	}

	@Column(name = "Comment")
	public String getComment() {
		return comment;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public void setTaskName(String taskName) {
		this.taskName = taskName;
	}

	public void setTime(Long time) {
		this.time = time;
	}

	public void setComment(String comment) {
		this.comment = comment;
	}

	public void setTask(Task task) {
		this.task = task;
	}

	@ManyToOne(cascade = { CascadeType.REMOVE }, fetch = FetchType.LAZY)
	@OnDelete(action = OnDeleteAction.CASCADE)
	@JoinColumn(name = "tid")
	public Task getTask() {
		return task;
	}

}



Код создания таблицы TaskLog:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE `tasklog` (
	`id` BIGINT(20) NOT NULL,
	`Comment` VARCHAR(255) NULL DEFAULT NULL,
	`TaskName` VARCHAR(255) NULL DEFAULT NULL,
	`Time` BIGINT(20) NULL DEFAULT NULL,
	`tid` BIGINT(20) NULL DEFAULT NULL,
	PRIMARY KEY (`id`),
	INDEX `FK_ifh70mmn6648pjxhckqblexmf` (`tid`)
)
COLLATE='cp1251_general_ci'
ENGINE=MyISAM;
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate, каскадное удаление.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]