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/

10-09 15:15