- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在将元素插入由 Map 表示的 @ElementCollection
时遇到问题。插入具有相同值的元素时,它们不会持久化。给定以下 @Entity
及其 @Embeddable
:
@Entity
@Table(name = "category", catalog = "my_db", schema = "")
public class Category implements Serializable {
@Id
@Column(name = "id")
private Integer id;
@ElementCollection(fetch = FetchType.LAZY, targetClass = CategoryLabels.class)
@CollectionTable(name = "category_labels", joinColumns =
@JoinColumn(name = "category_id"), catalog = "my_db")
@MapKeyColumn(name = "language_id")
private Map<Integer, CategoryLabels> labels = new HashMap<Integer, CategoryLabels>();
...
}
@Embeddable
public class CategoryLabels implements Serializable {
@Column(name = "label1")
private String label1;
@Column(name = "label2")
private String label2;
...
}
数据库条目
+-------------+-------------+-----------+---------+
| category_id | language_id | label1 | label2 |
+-------------+-------------+-----------+---------+
| 183 | 1 | Capacity | Timings |
| 183 | 2 | | |
+-------------+-------------+-----------+---------+
如果每个 map 条目的 label1 和 label2 不同(如上所示),则插入工作正常。
但是,如果我添加一个与另一个条目具有相同的 label1 和 label2 值的条目,则第二个条目从不持久化到数据库中。例如,如果我向 Map 添加一个条目,两个标签都为空(如示例中的第二个条目)但 language_id=3,这将永远不会持久化。
我知道这个常见问题:http://en.wikibooks.org/wiki/Java_Persistence/ElementCollection#Common_Problems并且检查没有 ID 的嵌入对象的字段和外键 @JoinColumns
作为 ID。这在我的情况下似乎不起作用,@JoinColumn
中的外键在 ID 检查中被完全忽略。
这是 Eclipselink 中的错误还是我做错了什么?
编辑:
我已经设置了 -Declipselink.logging.level=FINEST
,这表明没有为带有空标签的第二个和后续条目执行任何 SQL。
此外,我还制作了一个示例项目,您可以使用它来重现该问题: http://bit.ly/1bR8ywO
最佳答案
刚刚再次测试,我发现问题出在事务管理上。我根本不想使用事务,所以我用 @TransactionManagement(TransactionManagementType.BEAN)
注释了我的 SLSB。当我删除它时,事务由容器管理,然后更新按预期进行。
将事务管理设置为容器管理并不是我希望的解决方案,但目前可行。我仍然认为这是 eclipselink 中的一个错误。
关于java - 当字段值相等时,@Embeddable 的 @ElementCollection Map 不会保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20990889/
public enum ReportStatus { SUCCCEED, FAILED; } public class Work { @ElementCollection @E
如何使用 JPQL 通过 ElementCollections 查询 JPA 实体,其中 ElementCollection 包含给定元素集中的所有元素? 例如,如果 Node 实体定义了“属性”的
我的目标是克隆实体“产品”及其所有过滤器。 例如,我有一个实体(为简单起见,省略了 getter 和 setter): @Entity public class Product { @Id
我有一个这样声明的“标签”属性: @Entity public class BlogArticle { [...] @ElementCollection(fetch = FetchTy
我有 JavaEE 应用程序并使用 Hibernate 4.3.7.Final。在我的数据库中有两个表:RECHT(包含列:RECHT_RECHTEART(VARCHAR)和GEOB_ID(NUMBE
我想减少 spring 运行的查询量。当通过 SQL 获取带有 @ElementCollection 的对象时,我想直接通过查询中的 JOIN 获取 ElementCollections 的数据。 具
我使用 Hibernate 3.5.6 作为我的 JPA 2.0 实现。我正在尝试在我的实体中构建一个 @ElementCollection(省略了许多字段): @Entity public clas
我有一个包含元素集合的实体类 PositionOrdering: @ElementCollection(targetClass = Position.class, fetch = FetchType.
我有一个多对多关系,它为项目分配标签(除了字符串之外什么都没有): +------+ +------------+ +-------+ | ITEM | | ITEM_LABEL |
我有一个 @Entity命名 Video ,它包含 @ElementCollection标签: @Entity @Table(name = "videos") public class Video {
我试图弄清楚如何使用枚举列表(@ElementCollection)对实体进行 DTO 投影。不幸的是,缺少 QueryDsl 文档,在这里我只能找到版本 3 的结果 不是 适用于版本 4。 @Ent
我有一个具有不同字段的实体: @Entity public class TestEntity { private int id; private String name; pr
给定一个实体产品 @Entity public class Product { private Long id; private List reviews; public Pr
我的数据库中有两个表,如下所示,外键来自 job_label.job_id到 job_record 中的等效列。此外,job_id 的三元组, label_key ,和label在job_record
我有一个具有不同字段的实体: @Entity public class TestEntity { private int id; private String name; pr
我有一个 @ElementCollection @CollectionTable( name = "orgattributes", joinColumns = @JoinColumn(name =
我有一个 User 类,可以有多个登录名: @Entity public class User { @ElementCollection private List logins = new A
对于这个问题,请考虑以下示例: @Entity public class File { public static enum Permission { READABLE, WRITEABLE,
无论如何,我可以在没有这个注释的情况下获得 @ElementCollection 的效果吗?我使用的是 Hibernate 3.3,而 @ElementCollection 和 @Collection
我有以下实体,对此示例进行了简化: @Entity public class Subscription { @Column private String user; @Column
我是一名优秀的程序员,十分优秀!