我目前正在开展一个学校项目,我们必须创建自己的“Twitter”应用程序,并且我在域对象的持久性方面遇到了一些麻烦.

我的帐户类(为便于阅读而简化):

@Entity

public class Account implements Serializable {

@Id

@GeneratedValue(strategy = GenerationType.SEQUENCE)

private Long id;

@Column(unique = true)

private String email;

@OneToMany

private final List following = new ArrayList<>();

@OneToMany(mappedBy = "tweetedBy", cascade = ALL)

private final List tweets = new ArrayList<>();

我的推文类(为便于阅读而简化):

@Entity

public class Tweet implements Serializable {

@Id

@GeneratedValue(strategy = GenerationType.SEQUENCE)

private Long id;

private String content;

@ManyToOne

private Account tweetedBy;

@OneToMany(cascade = CascadeType.PERSIST)

@JoinTable(name = "tweet_likes")

private final List likedBy = new ArrayList<>();

@OneToMany(cascade = CascadeType.PERSIST)

@JoinTable(name = "tweet_mentions")

private final List mentions = new ArrayList<>();

持久代码(简化):

Account a1 = new Account("user1@gmail.com", "password1");

Account a2 = new Account("user2@gmail.com", "password2");

Account a3 = new Account("user3@gmail.com", "password3");

a1.addTweet("Sup mah dudes.");

a1.addTweet("yoyo");

a2.addTweet("Allo Allo #tweeting");

a2.addTweet("#testing yoyo");

a1.getTweets().get(0).addLike(a3);

a1.addFollowing(a3);

em.persist(a1);

em.persist(a2);

em.persist(a3);

我遇到的问题是,LikeBy和提及没有正确持久化.正在生成链接器表并插入数据,但我在插入用户时不断出现重复的条目错误.我相信我正确地建立了关系(单向OneToMany),因为我不希望帐户跟踪它所提到的推文.

我尝试过的:

> @JoinColumn用于喜欢和提及(导致重复插入)

>对于喜欢和提及的@JoinTable(导致重复插入)

>只有@OneToMany用于喜欢和提及(这不会导致错误,但会为两个关系创建一个链接器表,其中任何一个都不能为null)

> @OneToMany for likes,然后@joinColumn提及nullable = true(这导致你不能在推文中提及你的情况,除非你喜欢它,这是奇怪的行为)

> @OneToMany(cascade = CascadeType.MERGE)(导致重复插入)

Netbeans输出的重复插入错误:

Warning: Local Exception Stack:

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.4.qualifier): org.eclipse.persistence.exceptions.DatabaseException

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'user6@gmail.com' for key 'EMAIL'

Error Code: 1062

Call: INSERT INTO ACCOUNT (AVATARPATH, BIO, EMAIL, ENCRYPTEDPASSWORD, LOCATION, USERNAME, USERROLE, WEBSITE) VALUES (?, ?, ?, ?, ?, ?, ?, ?)

bind => [8 parameters bound]

Query: InsertObjectQuery(domain.Account@3c7f9d54)

我相信这个错误的发生是因为我的JPA imlementation的流程如下:

>帐户持续存在

>推文持续存在(因为它在账户内)

>帐户持续存在(因为它在Tweet内)< - 重复条目

我期待的是:

> 1个链接表,其中包含tweet_id(fk)和表示喜欢的account_id(fk)

> 1个链接表,其中包含tweet_id(fk)和表示提及的account_id(fk)

如果有人可以帮我解释注释或者解释我做错了什么,那将非常感激.

Ty提前获得任何帮助.

java 实体类 代码重复_java – JPA两个单向@OneToMany关系到同一个实体导致重复输入...相关推荐

  1. c++ ea 代码 生成_EA生成实体类代码

    引言 在做机房个人版重构的时候,就听说了EA是一个强大的软件.仅仅只是知道的时候,已经画完了图,没有怎么用EA其它的功能,所以一直没有见识过罢了.如今到了机房合作了,想到EA一定要好好用,这样能省不少 ...

  2. java实体类怎么写_Java中(entity)实体类的书写规范

    在日常的Java项目开发中,entity(实体类)是必不可少的,它们一般都有很多的属性,并有相应的setter和getter方法.entity(实体类)的作用一般是和数据表做映射.所以快速写出规范的e ...

  3. java电脑类的接口_java 一个类实现两个接口的案例

    直接用英文逗号分隔就可以了,比如:? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 inerface IHello { String sayHello ...

  4. java实体类实现抽象类_java接口、抽象类、实体类关系介绍

    接口:接口是一个引用类型,与类相似,不过在接口中只能包含常量,方法名和嵌套类型.没有构造器,所以不能被实例化只能被类所实现或者被另外的接口所继承.在接口中声明的方法没有方法体. 抽象类:将类层次中共有 ...

  5. java实体类命名规范_java实现周易起名-java实体类起名规范

    Java中类的命名规范? java命名规范? Camel-Case(Camel-Case)是编写计算机程序时的一组命名规则(惯例). 程序员能够更轻松地与同行交流自己的代码,因此最好采用具有更好可读性 ...

  6. java建立类的思想_JAVA类和对象创建

    面向对象 学习目标: 理解面向对象的编程思想 理解类与对象的关系 如何创建类与对象 方法重载 一:什么是面向对象编程(OOP) 面向对象编程(Object Oriented Programming,O ...

  7. java流类图结构_java I/O 流总结

    一.java 流操作有关的类和接口: 类                                                                          说明 Fil ...

  8. java流类图结构_java学习之IO流(学习之旅,一)

    个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态. Java流类图结构 这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很 ...

  9. java uml类图教程_Java利器之UML类图详解

    原标题:Java利器之UML类图详解 (点击上方公众号,可快速关注) 来源:伯乐在线专栏作者- Code4Android 如需转载,发送「转载」二字查看说明 前言 UML(Unified Modeli ...

最新文章

  1. mysql view 能和表关联吗_MySQL 事务隔离及实现,赶快码上收藏!满满干货
  2. 智源论坛报名丨斯坦福大学马腾宇博士:为深度模型设计显示正则器
  3. 16年寒假随笔(2)
  4. bat脚本中获取上级目录_使用Python写一个可以监控Tomcat 运行的脚本,并且把.py文件转换成.exe文件...
  5. 在计算机管理中创建不同的用户,为什么在计算机管理员里创建密码密码总是不符合要求...
  6. 如何识别一个人是web前端程序员
  7. 使用CCDirector的notificationNode来创建独立的信息提示层
  8. node createConnection connect 区别?
  9. ubuntu mysql双主热备配置_mysql学习:mysql双主热备+lvs+keepalived配置
  10. 2021年CFA全套资料无偿分享|备考经验|备考计划
  11. 论文解读:基于图神经网络与蛋白质接触图的药靶亲和力预测(一)2021SC@SDUSC
  12. HR面试问题-你的缺点是什么?
  13. untiy Resorces目录动态加载资源
  14. HTML网页表格标签,HTML静态网页(标签、表格)
  15. RHCE怎么报名?需要什么条件?
  16. BM27 按之字形顺序打印二叉树
  17. Unix/Linux编程:getcontext、setcontext
  18. 爱看网的内存占用情况
  19. 2.3Linux常用命令
  20. IT傻博士-CCNA课程在线视频(1-5)

热门文章

  1. 鲜为人知的混沌工程,到底哪里好?
  2. LC3视角:Kubernetes下日志采集、存储与处理技术实践
  3. 什么是Docker?看这一篇文章就够了
  4. NVIDIA向交通运输行业开源其自动驾驶汽车深度神经网络
  5. mi6 android版本,小米6:我依旧是王,MIUI10.4.2稳定版与AndroidP同时到来
  6. python封装c接口_用C为python3.1封装mysql接口(一)
  7. linux使用ping命令ping本机,Linux下使用ping命令判断网络的好坏
  8. Seata 单机环境搭建_01
  9. SprinBoot 集成 Flowable 工作流引擎镜像制作
  10. 安装和使用Ant Design Vue 图标库