Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate, каскадное удаление. / 1 сообщений из 1, страница 1 из 1
26.06.2015, 17:22
    #38994046
DikiiSlon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate, каскадное удаление.
Добрый день. У меня такая проблема: не могу понять, что делаю не так, перепробовал кучу разных вариантов настройки каскадного удаления данных из БД. У меня есть 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
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate, каскадное удаление. / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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