JPAController getReference BigDecimal 问题
我有一个 JPAController 类,它具有创建方法来在父表和详细表中保存记录。两个表中的主键均为 BigDecimal 类型,小数位数为 8,精度为 15。现在我的问题是,当我调用 create 方法时,我在 public T getReference(ClassEntityClass,ObjectprimaryKey)asBigDecimal 中得到错误,具有 3 个比例和 5 个精度,如果将 42.20112012 作为参考键,那么我得到的错误是,
Caused by: javax.persistence.EntityNotFoundException: Could not find entitiy for id: 42.201
我的创建JPAController 类中的方法如下,我想在 RuleApplGroupMst(父表)和 RuleGroupRelation(明细表)表中插入记录,
Collection<RuleGroupRelation> attachedRuleGroupRelationCollection = new ArrayList<RuleGroupRelation>();
for (RuleGroupRelation RuleGroupRelationCollectionRuleGroupRelationToAttach : RuleApplGroupMst.getRuleGroupRelationCollection()) {
RuleGroupRelationCollectionRuleGroupRelationToAttach = em.getReference(RuleGroupRelationCollectionRuleGroupRelationToAttach.getClass(),RuleGroupRelationCollectionRuleGroupRelationToAttach.getRgrSrgKey());
attachedRuleGroupRelationCollection.add(RuleGroupRelationCollectionRuleGroupRelationToAttach);
}
感谢您的帮助......
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
EntityManager.getReference
依赖主键的相等性从数据库中获取相应的实体。当您选择 BigDecimal 作为主键时,您必须使用 BigDecimal 的精确表示来获取对实体的引用。您不能使用近似值。简而言之,按照equals()
方法:用作
EntityManager.getReference
中参数的主键值必须与存储的主键值的范围和值相匹配,以便允许 JPA 提供程序返回引用。因此,您应该使用与数据库中最初存储的 42.201 相同的表示形式,以便成功检索实体。
EntityManager.getReference
relies on the equality of primary keys to fetch the corresponding entity from the database. When you chooseBigDecimal
s as your primary key, then you must use the exact representation of theBigDecimal
to obtain a reference to an entity. You cannot use an appromixation. In simpler words, going by the definition of theequals()
method of BigDecimal:the primary key values used as the argument in
EntityManager.getReference
must match the stored primary key values in scale and in value, in order to allow the JPA provider to return the reference.Therefore, you ought to use the same representation for 42.201 as originally stored in the database, in order to retrieve the entity successfully.
我得到了答案,
在我的例子中,我在 JPAController 类中创建了用户定义的方法,如下所示,
然后在实体 Bean 中声明 OneToMany 关系,
然后我通过托管 bean 调用 create_custom 方法。
它适用于所有类型(包括 BigDecimal)的主键/引用键。
I got the answer,
In My Case, i have created the user defined method in JPAController Class as below,
and then declare OneToMany Relationship in Entity Bean as,
and then i call create_custom method by managed bean.
It works with all type(including BigDecimal) of Primary/Reference Key.