openjpa和scala问题。
数据库(h2)中有两个表-任务和任务列表。
任务列表包含集合ArrayList。
每个任务列表可以包含来自其他任务列表的任务
当taskx在tasklist1中修改时,如果它包含taskx,则必须在tasklist2中修改它。
如何实施?
我可以将新任务添加到任务列表并将其保存到数据库,但当我尝试将taskx从tasklist1 tasks集合添加到tasklist2 tasks集合并将其持久化时,taskx不会持久化到数据库中。
例子:
一。将task1添加到tasklist1,将task2添加到tasklist2将导致:
任务列表1:[task1]
任务列表2:[task2]
2。将task2添加到tasklist1将导致:
任务列表1:[task1]
三。将task3添加到tasklist1,将task4添加到tasklist2将导致:
任务列表1:[任务1,任务3]
任务列表2:[任务2,任务4]
怎么了?
任务类:
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
}
任务列表类:
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)
}
最佳答案
据我所知,多对多关联(在映射注释中指定)意味着两个实体之间的关联表(即应该指定@jointable注释)。
关于database - JPA问题(Scala使用),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6696075/