hibernate中如何删除连接表中的记录

2023-12-01

论坛会员

我需要你们所有人的帮助。我有两个具有一对多关系的 POJO 模型。我的项目 pojo 如下

@Entity
@Table(name = "project")
public class Project implements java.io.Serializable {

    private Integer projectid;
    private Date enddate;
    private String projectdesc;
    private String projectname;
    private String projecttitle;
    private Date startdate;
    private Set<Task> tasks = new HashSet<Task>(0);

    public Project() {
    }

    public Project (Integer id,String projectname, String projecttitle, String projectdesc, Date startdate, Date enddate) {
        this.projectid = id;
        this.enddate = enddate;
        this.projectdesc = projectdesc;
        this.projectname = projectname;
        this.projecttitle = projecttitle;
        this.startdate = startdate;
    }

    public Project(Date enddate, String projectdesc, String projectname,
            String projecttitle, Date startdate, Set<Task> tasks) {
        this.enddate = enddate;
        this.projectdesc = projectdesc;
        this.projectname = projectname;
        this.projecttitle = projecttitle;
        this.startdate = startdate;
        this.tasks = tasks;
    }

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "projectid", unique = true, nullable = false)
    public Integer getProjectid() {
        return projectid;
    }

    public void setProjectid(Integer projectid) {
        this.projectid = projectid;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "enddate", length = 19)
    public Date getEnddate() {
        return enddate;
    }

    public void setEnddate(Date enddate) {
        this.enddate = enddate;
    }

    @Column(name = "projectdesc")
    public String getProjectdesc() {
        return projectdesc;
    }

    public void setProjectdesc(String projectdesc) {
        this.projectdesc = projectdesc;
    }

    @Column(name = "projectname")
    public String getProjectname() {
        return projectname;
    }

    public void setProjectname(String projectname) {
        this.projectname = projectname;
    }

    @Column(name = "projecttitle")
    public String getProjecttitle() {
        return projecttitle;
    }

    public void setProjecttitle(String projecttitle) {
        this.projecttitle = projecttitle;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "startdate", length = 19)
    public Date getStartdate() {
        return startdate;
    }

    public void setStartdate(Date startdate) {
        this.startdate = startdate;
    }

    @OneToMany(cascade = CascadeType.ALL, fetch =FetchType.EAGER)
    @JoinTable(name = "project_task", joinColumns = { @JoinColumn(name = "projectid") }, inverseJoinColumns = { @JoinColumn(name = "taskid") })
    public Set<Task> getTasks() {
        return tasks;
    }

    public void setTasks(Set<Task> tasks) {
        this.tasks = tasks;
    }


}

我的任务 pojo 是

@Entity
@Table(name = "task")
public class Task implements java.io.Serializable {

    private Integer taskid;
    private Integer depth;
    private Double duration;
    private String durationunit;
    private Date enddate;
    private Integer parentid;
    private Integer percentdone;
    private Integer priority;
    private Date startdate;
    private Integer taskindex;
    private String taskname;

    public Task() {
    }

    public Task(Integer depth, Double duration, String durationunit,
            Date enddate, Integer parentid, Integer percentdone,
            Integer priority, Date startdate, Integer taskindex,
            String taskname) {
        this.depth = depth;
        this.duration = duration;
        this.durationunit = durationunit;
        this.enddate = enddate;
        this.parentid = parentid;
        this.percentdone = percentdone;
        this.priority = priority;
        this.startdate = startdate;
        this.taskindex = taskindex;
        this.taskname = taskname;
    }

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "taskid", unique = true, nullable = false)
    public Integer getTaskid() {
        return taskid;
    }

    public void setTaskid(Integer taskid) {
        this.taskid = taskid;
    }

    @Column(name = "depth")
    public Integer getDepth() {
        return depth;
    }

    public void setDepth(Integer depth) {
        this.depth = depth;
    }

    @Column(name = "duration", precision = 22, scale = 0)
    public Double getDuration() {
        return duration;
    }

    public void setDuration(Double duration) {
        this.duration = duration;
    }

    @Column(name = "durationunit")
    public String getDurationunit() {
        return durationunit;
    }

    public void setDurationunit(String durationunit) {
        this.durationunit = durationunit;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "enddate", length = 19)
    public Date getEnddate() {
        return enddate;
    }

    public void setEnddate(Date enddate) {
        this.enddate = enddate;
    }

    @Column(name = "parentid")
    public Integer getParentid() {
        return parentid;
    }

    public void setParentid(Integer parentid) {
        this.parentid = parentid;
    }

    @Column(name = "percentdone")   
    public Integer getPercentdone() {
        return percentdone;
    }

    public void setPercentdone(Integer percentdone) {
        this.percentdone = percentdone;
    }

    @Column(name = "priority")
    public Integer getPriority() {
        return priority;
    }

    public void setPriority(Integer priority) {
        this.priority = priority;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "startdate", length = 19)
    public Date getStartdate() {
        return startdate;
    }

    public void setStartdate(Date startdate) {
        this.startdate = startdate;
    }

    @Column(name = "taskindex")
    public Integer getTaskindex() {
        return taskindex;
    }

    public void setTaskindex(Integer taskindex) {
        this.taskindex = taskindex;
    }

    @Column(name = "taskname")
    public String getTaskname() {
        return taskname;
    }

    public void setTaskname(String taskname) {
        this.taskname = taskname;
    }


}

项目 pojo 与任务关联为一对多关系。现在我想根据我传递的 id 删除一项任务, 但问题是我无法删除连接表project_task 的外键。

我尝试使用下面的代码首先删除project_task

Session session = this.hibernateTemplate.getSessionFactory().getCurrentSession();
        Query query = session.createQuery("delete from project_task where taskid="+id);
        query.executeUpdate();

然后尝试使用以下代码删除任务

Object record = hibernateTemplate.load(Task.class, id);
hibernateTemplate.delete(record);

但不知道为什么这里没有发生删除。任何人都知道我在代码中做错了什么这不允许删除发生


首先尝试打破关联:

Task record = hibernateTemplate.load(Task.class, id);
Project project = hibernateTemplate.load(Project.class, projectId);
project.getTasks().remove(record);
hibernateTemplate.update(project);
hibernateTemplate.delete(record);

如果您没有可用的项目 ID,您可能需要在任务内创建逆向 ManyToOne 关系。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hibernate中如何删除连接表中的记录 的相关文章

  • 正则表达式拆分数字和字母组,不带空格

    如果我有一个像 11E12C108N 这样的字符串 它是字母组和数字组的串联 如何在中间没有分隔符空格字符的情况下分割它们 例如 我希望分割结果为 tokens 0 11 tokens 1 E tokens 2 12 tokens 3 C
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • 比较两个文本文件的最快方法是什么,不将移动的行视为不同

    我有两个文件非常大 每个文件有 50000 行 我需要比较这两个文件并识别更改 然而 问题是如果一条线出现在不同的位置 它不应该显示为不同的 例如 考虑这个文件A txt xxxxx yyyyy zzzzz 文件B txt zzzzz xx
  • java中如何连接字符串

    这是我的字符串连接代码 StringSecret java public class StringSecret public static void main String args String s new String abc s co
  • JavaFX 中具有自定义内容的 ListView

    How i can make custom ListView with JavaFx for my app I need HBox with image and 2 Labels for each line listView 您可以通过查看
  • 如何在不超过最大值的情况下增加变量?

    我正在为学校开发一个简单的视频游戏程序 我创建了一个方法 如果调用该方法 玩家将获得 15 点生命值 我必须将生命值保持在最大值 100 并且由于我目前的编程能力有限 我正在做这样的事情 public void getHealed if h
  • 当从服务类中调用时,Spring @Transactional 不适用于带注释的方法

    在下面的代码中 当方法内部 是从内部调用的方法外部 应该在交易范围内 但事实并非如此 但当方法内部 直接从调用我的控制器class 它受到事务的约束 有什么解释吗 这是控制器类 Controller public class MyContr
  • Hibernate.createBlob() 方法从 Hibernate 4.0.1 开始已弃用,并移至 Hibernate.getLobCreator(Session session).createBlob()

    Method Hibernate createBlob 已弃用自休眠4 0 1并搬到Hibernate getLobCreator Session session createBlob 任何解决方案我应该在方法内传递什么getLobCrea
  • hibernate锁等待超时超时;

    我正在使用 Hibernate 尝试模拟对数据库中同一行的 2 个并发更新 编辑 我将 em1 getTransaction commit 移至 em1 flush 之后我没有收到任何 StaleObjectException 两个事务已成
  • Java 8 流 - 合并共享相同 ID 的对象集合

    我有一系列发票 class Invoice int month BigDecimal amount 我想合并这些发票 这样我每个月都会收到一张发票 金额是本月发票金额的总和 例如 invoice 1 month 1 amount 1000
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • IntelliJ - 调试模式 - 在程序内存中搜索文本

    我正在与无证的第三方库合作 我知道有一定的String存储在库深处的某个字段中的某处 我可以预测的动态值 但我想从库的 API 中获取它 有没有一种方法可以通过以下方式进行搜索 类似于全文搜索 full程序内存处于调试模式并在某个断点处停止
  • Struts 2 + Sitemesh 3 集成 - FreemarkerDecoratorServlet 中的 NPE

    我将 Struts 2 版本 2 3 14 3 与 Sitemesh 3 版本 3 0 alpha 2 一起使用 并且在某些情况下遇到 NullPointerException 首先 这是我的 web xml 中的 struts2 site
  • 我可以创建自定义 java.* 包吗?

    我可以创建一个与预定义包同名的自己的包吗在Java中 比如java lang 如果是这样 结果会怎样 这难道不能让我访问该包的受保护的成员 如果不是 是什么阻止我这样做 No java lang被禁止 安全管理器不允许 自定义 类java
  • 替换后增量

    我自己已经有一个问题了 但我想扩展它后增量示例 https stackoverflow com questions 51308967 post increment with example char a D int b 5 System o
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t
  • Java中的Object类是什么?

    什么是或什么类型private Object obj Object http download oracle com javase 6 docs api java lang Object html是Java继承层次结构中每个类的最终祖先 从
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu

随机推荐

  • JSF 2:ajax 调用后页面重定向

    我陷入了类似的导航案例问题this一 简而言之 我正在尝试使用 ajax 渲染将导航从一个页面重定向到另一个页面h commandLink 这是支持 bean ManagedBean public class StartBean publi
  • OffscreenCanvas 无法克隆,因为它已分离

    昨天又回到了我对 HTML canvas 的爱好 并尝试在单独的线程中进行渲染 只是在控制台中面临以下错误 未捕获的 DOMException 无法在 Worker 上执行 postMessage 无法克隆 OffscreenCanvas
  • AppStore语言描述和“本地化原生开发区域”

    一款以三种语言 英语 意大利语和西班牙语 本地化的 iPhone 应用程序已提交至 AppStore 并附有三种语言的说明和屏幕截图 结果是 在 AppStore USA 中有英语描述 在 AppStore Spain 有西班牙语描述 在
  • 观察 UITableView 中的捏合多点触控手势

    我正在寻找在 UITableView 之上实现捏入 捏出 我已经研究了几种方法 包括这个 类似问题 但是虽然我可以创建一个UIViewTouch对象并将其覆盖到我的 UITableView 上 滚动事件不会转发到我的 UITableView
  • 关于Apple的KMLViewer placemarkDescription和注释字幕

    在我的应用程序中 我使用 Apple 的 KMLViewer 来显示从 KML 文件获取的注释 在文件 KMLParser m 中 有一个实例变量 placemarkDescription它将描述标签下的信息从 kml 文件转换为注释副标题
  • 将 `.klib` 库添加到 kotlin 多平台

    我想知道如何将我的 cinterop ted 库导入到 kotlin 多平台构建的 gradle 构建中 我已经创建了library def文件并填充它 我还生成了library klib以及随之而来的文件夹 我只是不明白如何将其导入到gr
  • 名称为 char[] 的变量

    如何在 C 中使用 char 表中指定的名称创建变量 就像是 char name gets name int name 0 我希望你明白我的意思 C 与您可能习惯的 Python 或 Ruby 等脚本语言不同 C 是编译而不是解释的 在运行
  • 使用replaceall输出错误

    为什么我从以下代码中得到 AAAAAAAAA 而不是 1A234A567 String myst 1 234 567 String test myst replaceAll A System out println test 任何想法 尝试
  • Android 文档中没有关于 RecyclerView 和 StaggeredGridLayoutManager 的好例子

    我找不到更好的使用示例RecyclerView with StaggeredGridLayoutManager 甚至不在安卓文档 Q1 我需要一些例子来正确解释如何使用RecyclerView with StaggeredGridLayou
  • Integer.class 和 Integer.TYPE 之间的区别[重复]

    这个问题在这里已经有答案了 这两者有什么区别 原始类型不能有 类 可以吗 它是原始类型 没有对象可以有类 这两者有什么区别呢 我不确定你的意思 但是 AClass对象是类型的运行时代表 也就是说 有这样的事情int class这不同于Int
  • 为什么 sbt 在设置 $JAVA_HOME 时报告“未检测到 java 安装”?

    我有 2 个 sbt android scala 项目 第一个是单个的 ls al drwxr xr x 13 alex staff 442 Dec 24 20 44 drwxr xr x 4 alex staff 136 Dec 24 2
  • JMS 消耗多个主题

    我是 Java 新手 正在开发一个使用多个 不同 主题并将其发送到另一台服务器的项目 我想知道处理多个主题的最佳方法是什么 据我了解 每个消费者都与一个主题相关 因此 如果我必须使用多个主题 则每个不同的主题都需要一个消费者 由于消费者进行
  • 如何修复一些 Xcode 13 错误,例如无法正确跳转到定义?

    我最近更新到 Xcode 13 突然 显示代码操作 中的选项不再起作用 这包括 跳转到定义 显示快速帮助 甚至突出显示所有使用某些规范的地方 有人遇到同样的问题或有解决办法吗 我已经尝试关闭应用程序 重新启动计算机 清理构建文件夹 但没有任
  • 在 Javascript 中将所有复选框值作为数组传递

    我有以下复选框 我需要将它们作为数组值获取
  • 防止弹性项目超过父级高度并使滚动条工作

    如何防止子div带有滚动条和flex 1超过 Firefox 中其父级 Flexbox 的高度 它在 Chrome 中工作正常 CodePen 链接 如果您更喜欢它而不是 Stack Overflow 片段 https codepen io
  • 在循环中追加到字典值列表

    我有一些代码 其中使用名称列表和结果文件 最终是多个文件 团队 名称 地点 我正在寻找的最终结果是将每个人的姓名 键 与点 值 列表相关联 但是 当我使用下面的代码时 我最终得到的结果如下 Abe 100 80 90 Bob 100 80
  • $_ 的奇怪值/行为

    输出应该是aaabbbcccdddeee not aaa555234dddeee perl wle map for my i 2 i lt 5 i push a a e print a aaa555234dddeee 仅在引用 取消引用时的
  • 如何异步等待 x 秒然后执行某些操作?

    我知道有Thread Sleep and System Windows Forms Timer and Monitor Wait在 C 和 Windows 窗体中 我似乎无法弄清楚如何等待 X 秒然后做其他事情 而不锁定线程 我有一个带有按
  • 如何在 python 中上传 FTP 上的完整目录? [复制]

    这个问题在这里已经有答案了 我必须在 FTP 服务器上上传一个目录 其中包含子目录和文件 但我似乎无法正确理解 我想按原样上传目录 及其子目录和文件所在的位置 ftp FTP ftp connect host port ftp login
  • hibernate中如何删除连接表中的记录

    论坛会员 我需要你们所有人的帮助 我有两个具有一对多关系的 POJO 模型 我的项目 pojo 如下 Entity Table name project public class Project implements java io Ser