- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据这篇文章Difference between @OneToMany and @ElementCollection?我应该更喜欢 @ElementCollection
用于可嵌入类型,而 @OneToMany
用于实体。但是使用 @OneToMany
我可以额外设置选项 orphanRemoval=true
。我如何使用 @ElementCollection
执行此操作?它暗示了吗?
最佳答案
这是隐含的。删除拥有实体也会删除 @ElementCollection
上的所有数据。如果 Session
尚未关闭,则将 Collection
设置为 null 或更改 Collection
中的元素将导致更新。
官方文档here是这样说的:
2.8.1. Collections as a value type
Value and embeddable type collections have a similar behavior assimple value types because they are automatically persisted whenreferenced by a persistent object and automatically deleted whenunreferenced. If a collection is passed from one persistent object toanother, its elements might be moved from one table to another.
...
For collections of value types, JPA 2.0 defines the @ElementCollectionannotation. The lifecycle of the value-type collection is entirelycontrolled by its owning entity.
我运行了这三个测试来测试它:
@Test
public void selectStudentAndSetBooksCollectionToNull() {
Student student = studentDao.getById(3L);
List<String> books = student.getBooks();
books.forEach(System.out::println);
student.setBooks(null);
em.flush(); // delete from student_book where student_id = ?
}
@Test
public void selectStudentAndAddBookInCollection() {
Student student = studentDao.getById(3L);
List<String> books = student.getBooks();
books.add("PHP Book");
books.forEach(System.out::println);
em.flush(); // insert into student_book(student_id, book) values(?, ?)
}
@Test
public void selectStudentAndChangeCollection() {
Student student = studentDao.getById(3L);
List<String> newBooks = new ArrayList<>();
newBooks.add("Rocket Engineering");
newBooks.forEach(System.out::println);
student.setBooks(newBooks);
em.flush(); // delete from student_book where student_id = ?
// insert into student_book(student_id, book) values(?, ?)
}
这是学生
类:
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "student_id", nullable = false, insertable = false, updatable = false)
private Long id;
@Column(name = "name", nullable = false)
private String name;
@ElementCollection
@CollectionTable(
name = "student_books",
joinColumns = @JoinColumn(name = "student_id", referencedColumnName = "student_id"))
@Column(name = "book")
private List<String> books = new ArrayList<>();
// Getters & Setters
}
关于java - @ElementCollection 是否意味着 orphanRemoval?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46425395/
我有 2 个实体: 轨迹 引用资料 在每个Locus上我们可以定义很多不同的References,一个Reference可以被很多Locus使用。然后我有一个 ManyToMany 关系。 但是,在我
以下两个类(CD 和 DVD)彼此不相关。每个类都有不同的表。但都有子类,如地址。 保存 DVD/CD 的值时,条目插入到相应的表中。因此,当我尝试在 Address_Table 中添加值时,它使用
我在使用 hibernate 持久化克隆对象时遇到了问题。当它的嵌套子项被删除时,记录并没有从数据库中删除(我已经设置了 orphanRemoval = true)。 在下面的代码中,使用 json
我对双向 OneToOne 关系和孤儿删除有点困惑。这些是我的实体: @Entity @Table(name = "city") public class City { @Id @Ge
根据这篇文章Difference between @OneToMany and @ElementCollection?我应该更喜欢 @ElementCollection 用于可嵌入类型,而 @OneT
我有实体 Event 与另一个实体有特定关系: @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "even
我有一个 RECIPE 表,它与 INGREDIENT 表具有 OneToMany 关系,因为单个配方可以包含多种成分。问题是,如果用户删除一个成分(前端将所有字段(ingredient_id 和 i
我的目的是仅当实体连接音轨没有其他记录时才删除实体艺术家中的记录。 我尝试以这种方式使用 orphanRemoval: Soundtrack.php /** * @Assert\NotBlank(m
我到处搜索,但没有找到好的答案。 我正在使用 Hibernate + Spring + Mysql 开发一个 Maven 应用程序。 这是我的 application-context.xml :
我有非常具体的情况,并尝试了不同的场景来实现从Java集合中删除时从数据库中删除。 我的 House 与 Room 具有 OneToMany 关系,而 Room 与 Bed 具有 OneToMany
我一直在阅读有关 orphanRemoval= true 的帖子在 JPA 中。根据文档: orphanRemoval is a flag - Whether to apply the remove
我在 Hibernate 引用书的第 21 章中有一个基本的一对多父/子关系。 级联仅从子级到父级(持久级联只是因为我不想删除子级时删除父级)。 当我将一个 child 添加到 parent 并保存
以下示例已简化。 我有以下数据库结构: X -xid VARCHAR Y -yid VARCHAR -xid VARCHAR -zid VARCHAR Z -zid VARCHAR 我有以下
假设我们有两个实体(Profile 和Address)。一个配置文件可以有多个地址。在这种情况下,我们有: Profile: ... fields: ... o
我在使用 JPA/Hibernate (3.5.3) 设置时遇到问题,其中我有一个实体,一个“Account”类,它有一个子实体列表,“Contact”实例。我正在尝试能够将 Contact 的实例添
我有一个带有 fos restbundle 的 Symfony rest api 构建,我正在反序列化一个 json PUT 请求,以便更新具有多对多关系的学说实体。 但是,配置了orphanremo
因此,在我的一个实体中将 orphanRemoval = true 添加到 @OneToMany 关系后,在尝试保存新实体或删除现有实体时,出现以下异常:引用带有 orphanRemoval = tr
我正在使用 JPA 2.1、EclipseLink 2.5.0、SQLite3 数据库和 Swing 制作一个应用程序。 我有两个实体,EntityClient和EntityPhone ,其中第一个有
上面两个选项有什么区别?什么时候选择每个选项更合适? 最佳答案 它们之间的基本区别是: When using the orphanRemoval=true option Doctrine makes
我正在使用 hibernate 4.1.0,jpa 2.1。当我尝试建立一对多关系时,出现上述错误。我已经尝试过其他关于堆栈溢出的解决方案,但它们对我不起作用 这是我的 Bean 类: @Entity
我是一名优秀的程序员,十分优秀!