gpt4 book ai didi

database - JPA问题(Scala使用)

转载 作者:搜寻专家 更新时间:2023-10-30 20:44:23 25 4
gpt4 key购买 nike

OpenJPA 和 Scala 问题。

数据库 (h2) 中有 2 个表 - tasks 和 taskLists。

TaskList 包含集合 ArrayList。
每个任务列表可以包含来自另一个任务列表的任务
当 TaskList1 中的 taskX 被修改时,如果它包含 taskX,则必须在 TaskList2 中进行修改。

如何实现?

我可以将新任务添加到任务列表并将其保存到数据库中,但是当我尝试将 TaskX 从 TaskList1 任务集合添加到 TaskList2 任务集合并持久化它时,taskX 不会持久化到数据库中。

示例:
1.将task1添加到taskList1,将task2添加到taskList2,结果:
任务列表 1:[任务 1]
任务列表 2:[任务 2]
2.将task2添加到taskList1中会得到:
任务列表 1:[任务 1]
3.将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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com