Tag: 一对多

在OneToMany注释列表中重复

我正在使用JPA 2 + Hibernate 4.2.6开发一个Java项目,我得到了一个奇怪的行为。 在我的模型中,我有两个相关的参与者: Question和Answer @Entity public class Question { // … @OneToMany(mappedBy = “question”, cascade = CascadeType.ALL, fetch = FetchType.EAGER) private Set answers; // … } @Entity public class Answer { // … @ManyToOne(optional = false) @JoinColumn(name = “question_id”, nullable = false) private Question question; // … } 这很有效:所有与某个Question相关的Answer都正确加载。 但现在我需要将answers收集器的Set从Set更改为List 。 我改变了类型并再次运行应用程序,现在我得到了几个重复的answers […]

如何对Entity-Bean @OneToMany关系应用默认限制

我有两个实体模型,Customer和Order。 每个客户可能有数千个订单。 我在这两个实体之间有一个OneToMany和ManyToOne关系。 如何将此关系列表仅限制为前10个订单? 是否可以在@OneToMany上应用’WHERE’条件作为属性? 喜欢: @OneToMany(“Where Order.orderNo > 100”) 我的问题是当实体管理器创建的对象所有订单都在内存中创建时。 延迟加载无法解决我的考虑,因为我需要在默认构造中获得前10个订单。

JPA / Hibernate双向多对一导致StackOverflowException

我有实体User和GrantedRole具有双向一对多关系。 当我尝试将GrantedRole添加到Set in User时,没有抛出exception,但是当我调试User和GrantedRole对象的变量时,会有一个读取的描述 com.sun.jdi.InvocationException发生了调用方法。 调试时可以读取变量的不同字段,但是当我选择User中的角色字段或GrantedRole中的用户字段时,我得到与上面相同的描述。 当我进入用户的Set of GrantedRole时,我最终找到以下描述: 详细格式化程序错误:发生exception:java.lang.StackOverflowError 我的代码: public class User { private Set roles = new HashSet(); public User() { super(); } public User(String name, String password) { this.name = name; this.password = password; } @OneToMany(fetch = FetchType.EAGER, mappedBy = “user”) public Set getRoles() { return roles; } public void setRoles(Set […]

一对多关系:使用JPA 2.0更新删除的子项

我有一个双向的一对多关系。 0或1 客户 0个或更多产品订单的列表。 应该在两个实体上设置或取消设置该关系:在客户端,我想设置分配给客户端的产品订单列表; 然后应该将客户端设置/取消设置为自动选择的订单。 在产品订单方面,我想设置分配了oder的客户端; 然后应该从其先前已分配的客户列表中删除该产品订单,并将其添加到新分配的客户列表中。 我想只使用纯JPA 2.0注释和一个“合并”调用实体管理器(使用级联选项)。 我已尝试使用以下代码片段,但它不起作用(我使用EclipseLink 2.2.0作为持久性提供程序) @Entity public class Client implements Serializable { @OneToMany(mappedBy = “client”, cascade= CascadeType.ALL) private List orders = new ArrayList(); public void setOrders(List orders) { for (ProductOrder order : this.orders) { order.unsetClient(); // don’t use order.setClient(null); // (ConcurrentModificationEx on array) // TODO doesn’t work! } […]

@OneToMany映射JPA中的父ID为null

我在父子关系中使用javax.persistence.OneToMany关系。 父ID是空的,我已经阅读了Stackoverflow中的所有相关post,但没有得到任何线索我错过了什么。 根据提供的序列,所有相应的PK都在父表和子表中填充,但在子表中将FK设置为​​null 家长class: @Entity @Table(name = “DIVERSITY_TEMPLATE”) public class DiversityTemplate implements Serializable { private static final long serialVersionUID = 1L; @Id @SequenceGenerator(name = “DIVERSITY_TEMPLATE_ID”, sequenceName = “DIVERSITY_TEMPLATE_ID”, allocationSize = 1) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “DIVERSITY_TEMPLATE_ID”) @Column(name = “DIVERSITY_TEMPLATE_ID”) private Integer diversityTemplateId; @OneToMany(cascade = CascadeType.ALL, mappedBy = “diversityTemplate”, fetch = FetchType.LAZY) private List attributes […]

JPA Hibernate希望延迟加载返回空集合

我现在正在使用JPA-Hibernate,并希望集合为空,直到我调用相关的get()。 我已经尝试了几天而没有任何成功。 我想要这个的原因是因为我使用Exterialize(或Serialize)并且在将序列化字符串发送到客户端时并不总是希望集合存在。 @Entity public class Thread implements Externalizable { static final long serialVersionUID = 9L; @OneToMany(mappedBy = “parentThread”, fetch = FetchType.LAZY) @LazyCollection(LazyCollectionOption.EXTRA) public Collection getReplies() { return replies; } 这是回复模型: @Entity public class Reply implements Externalizable { static final long serialVersionUID = 8L; @ManyToOne @JoinColumn(name = “threadId”, referencedColumnName = “id”, nullable = false) public […]

使用@OneToMany Map的EclipseLink JPA“此上下文中的无效表”

我希望我在这里做些傻事…… 我正在尝试为Map设置JPA注释并获得以下堆栈跟踪。 Exception [EclipseLink-6069] (Eclipse Persistence Services – 2.4.1.v20121003-ad44345): org.eclipse.persistence.exceptions.QueryException Exception Description: The field [EMPLOYEE.PHONE_TYPE] in this expression has an invalid table in this context. Query: ReadAllQuery(name=”phones” referenceClass=Phone ) at org.eclipse.persistence.exceptions.QueryException.invalidTableForFieldInExpression(QueryException.java:739) at org.eclipse.persistence.internal.expressions.FieldExpression.validateNode(FieldExpression.java:281) at org.eclipse.persistence.expressions.Expression.normalize(Expression.java:3259) at org.eclipse.persistence.internal.expressions.DataExpression.normalize(DataExpression.java:369) at org.eclipse.persistence.internal.expressions.FieldExpression.normalize(FieldExpression.java:208) at org.eclipse.persistence.internal.expressions.SQLSelectStatement.normalize(SQLSelectStatement.java:1377) at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.buildNormalSelectStatement(ExpressionQueryMechanism.java:546) at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.prepareSelectAllRows(ExpressionQueryMechanism.java:1700) at org.eclipse.persistence.queries.ReadAllQuery.prepareSelectAllRows(ReadAllQuery.java:721) at org.eclipse.persistence.queries.ReadAllQuery.prepare(ReadAllQuery.java:657) at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:614) at org.eclipse.persistence.queries.ObjectLevelReadQuery.checkPrepare(ObjectLevelReadQuery.java:883) at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:575) […]

@OneToMany映射列表大小限制

有没有办法限制JPA中@OneToMany关系的列表大小? 这是我的代码示例: @OneToMany(mappedBy = “publication”, cascade=CascadeType.PERSIST) private List commentList; 我正在使用EclipseLink 2.3 JPA实现。 提前致谢。

删除元素时,Hibernate单向OneToMany映射中的约束违反,包括JoinTable和OrderColumn

从上面描述的映射中删除元素时遇到问题。 这是映射: @实体 @Table(name =“foo”) class Foo { 私人名单栏; @OneToMany @OrderColumn(name =“order_index”) @JoinTable(name =“foo_bar_map”,joinColumns = @JoinColumn(name =“foo_id”),inverseJoinColumns = @JoinColumn(name =“bar_id”)) @Fetch(FetchMode.SUBSELECT) public List getBars(){ 返回栏; } } 插入Bar-instances并保存Foo工作正常,但是当我从列表中删除元素并再次保存时,违反了映射表中bar_id的唯一约束。 以下SQL语句是由hibernate发布的,这看起来很奇怪: 日志:执行:从foo_bar_map删除,其中foo_id = $ 1,order_index = $ 2 细节:参数:$ 1 =’4’,$ 2 =’6′ 日志:执行S_5:更新foo_bar_map set bar_id = $ 1其中foo_id = $ 2和order_index = $ 3 细节:参数:$ 1 […]

OneToMany关系无效

我的表: 产品 :id,名称 优惠 :id,value,product_id 实体: @Entity @Table(name=”product”) public class Product implements Serializable { @OneToMany(mappedBy=”product”) private Set offers; … } @Entity @Table(name=”offer”) public class Offer implements Serializable { @ManyToOne @JoinColumn(name=”PRODUCT_ID”) private Product product; … } 当我尝试从表Product获取一些数据时,我得到一个java.lang.NullPointerException ,这段代码: product.getOffers()返回: {IndirectSet:未实例化} 如何解决这个问题?