Вопрос OpenJPA и Scala.
В базе данных есть 2 таблицы (h2) - задачи и списки задач.
TaskList содержит коллекцию ArrayList.
Каждый TaskList может содержать задачи из другого TaskLists
Когда taskX изменен в TaskList1, его необходимо изменить в TaskList2, если он содержит taskX.
Как это реализовать?
Я могу добавить новую задачу в список задач и сохранить ее в БД, но когда я пытаюсь добавить taskX из коллекции задач TaskList1 в коллекцию задач TaskList2 и сохранить ее, taskX не сохраняется в БД.
Пример:
1. Добавление task1 в taskList1 и task2 в taskList2 приведет к:
TaskList1: [task1]
TaskList2: [task2]
2. Добавление task2 в taskList1 приведет к:
TaskList1: [task1]
3. Добавление task3 в taskList1 и task4 в taskList2 приведет к:
TaskList1: [task1, task3]
TaskList2: [task2, task4]
Что не так?
Класс задачи:
import _root_.javax.persistence._
import org.apache.openjpa.persistence._
@Entity
@Table(name="tasks")
@ManyToMany
class CTask (name: String) {
def this() = this("new task")
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(unique = true, nullable = false)
var id: Int = _
var title: String = name
def getId = id
def getTitle = title
def setTitle(titleToBeSet: String) = title = titleToBeSet
override def toString: String = title
}
Класс TaskList:
import _root_.javax.persistence._
import _root_.java.util.ArrayList
import org.apache.openjpa.persistence._
@Entity
@Table(name="tasklists")
class CTaskList(titleText: String) {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(unique = true, nullable = false)
var id: Int = _
@Column(nullable = false)
var title: String = titleText
@ManyToMany
var tasks: ArrayList[CTask] = _;
var tags: String = ""
var rank: Int = 0
def getTasks = tasks
def this() = this("new task list")
def createTasks: ArrayList[CTask] = {
tasks = new ArrayList[CTask]
tasks
}
def getID = id
def getTags = tags
def setTags(tagsParam: String) = tags = tagsParam
def getRank = rank
def setRank(rankParam: Int) = rank = rankParam
def getTitle: String = title
def getTaskById(index: Int): CTask = {
null
}
def equals(anotherTaskList: CTaskList): Boolean = {
if (anotherTaskList == null) return false
if (anotherTaskList.getTasks == null)
return id == anotherTaskList.getID && title == anotherTaskList.getTitle && tags == anotherTaskList.getTags && rank == anotherTaskList.getRank && tasks == null;
else
return id == anotherTaskList.getID && title == anotherTaskList.getTitle && tags == anotherTaskList.getTags && rank == anotherTaskList.getRank && tasks != null && tasks.size == anotherTaskList.getTasks.size
}
def addTask(taskToBeAdded: CTask): Int = {
if (tasks == null)
tasks = new ArrayList[CTask]
tasks.add(taskToBeAdded)
tasks.indexOf(taskToBeAdded)}
def printTasks = println("TaskList's " + this + " tasks: " + tasks)
}