论坛首页 Java企业应用论坛

跟我学OpenJPA之四(与其他JPA实现的互换与对比---实践是检验真理的唯一标准)

浏览 16285 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-04-28  
其它吧,我觉得用eclipselink配Oracle数据库,是绝配:

它背后是Oracle,也也随oracle一起发布的版本,最关键是它能支持与Oracle数据库直接相关的内容。

以前一直用Hibernate,还是不错的。 没用过Open JPA.
0 请登录后投票
   发表时间:2012-06-04  
哥们,问个问题;
我用这个持久化主表对象,因为级联关系会接着持久化子表。
但是这个JPA好像不能保证这个持久化的先后顺序,有时会出现先持久化子表,导致找不到外键找不到(parent key not found);这个bug以前的业务中就没出现过,我就纳闷为什么突然会在批处理的时候会出现。
今儿做了个简单测试,写了一个很简单的例子,居然也有概率出现这个问题
这个在网上有看添加个@ForeignKey但是这个不是标准;
另外还可以整个撒配置<property...../>但是这个表的级联关系忒复杂,很多表建得不规范,又经过了很多轮测试,不得让随便改的,这个也基本用不起。
对这个你有撒看法,有撒解决方案没?
0 请登录后投票
   发表时间:2012-06-05  
shellwell 写道
哥们,问个问题;
我用这个持久化主表对象,因为级联关系会接着持久化子表。
但是这个JPA好像不能保证这个持久化的先后顺序,有时会出现先持久化子表,导致找不到外键找不到(parent key not found);这个bug以前的业务中就没出现过,我就纳闷为什么突然会在批处理的时候会出现。
今儿做了个简单测试,写了一个很简单的例子,居然也有概率出现这个问题
这个在网上有看添加个@ForeignKey但是这个不是标准;
另外还可以整个撒配置<property...../>但是这个表的级联关系忒复杂,很多表建得不规范,又经过了很多轮测试,不得让随便改的,这个也基本用不起。
对这个你有撒看法,有撒解决方案没?


这个问题我还真没有遇到过,我也没有用过非常复杂的数据库测试。
能不能把你写的测试代码和数据库发给我测试一下

simennet@gmail.com
0 请登录后投票
   发表时间:2012-06-05  
simen_net 写道
shellwell 写道
哥们,问个问题;
我用这个持久化主表对象,因为级联关系会接着持久化子表。
但是这个JPA好像不能保证这个持久化的先后顺序,有时会出现先持久化子表,导致找不到外键找不到(parent key not found);这个bug以前的业务中就没出现过,我就纳闷为什么突然会在批处理的时候会出现。
今儿做了个简单测试,写了一个很简单的例子,居然也有概率出现这个问题
这个在网上有看添加个@ForeignKey但是这个不是标准;
另外还可以整个撒配置<property...../>但是这个表的级联关系忒复杂,很多表建得不规范,又经过了很多轮测试,不得让随便改的,这个也基本用不起。
对这个你有撒看法,有撒解决方案没?


这个问题我还真没有遇到过,我也没有用过非常复杂的数据库测试。
能不能把你写的测试代码和数据库发给我测试一下

simennet@gmail.com

异常简单;EntityA,EntityB;
有一个one-to-many的关系从EntityA到EntityB;
EntityA a = new EntityA();
EntityB b = new EntityB();
a.add(b);
entityManager.persist(a);
entityManager.flush();
完了。
报错是parent Key not found;code=2291, state=23000;
以前业务不得问题;现在出这个有点莫名其妙;感觉JPA也不得那么次嘛。
0 请登录后投票
   发表时间:2012-06-05  
shellwell 写道
异常简单;EntityA,EntityB;
有一个one-to-many的关系从EntityA到EntityB;
EntityA a = new EntityA();
EntityB b = new EntityB();
a.add(b);
entityManager.persist(a);
entityManager.flush();
完了。
报错是parent Key not found;code=2291, state=23000;
以前业务不得问题;现在出这个有点莫名其妙;感觉JPA也不得那么次嘛。


请问你用什么做的事务管理
我使用Spring的注解事务,这种关联是经常使用,从来没有碰到过这个问题
0 请登录后投票
   发表时间:2012-06-05  
simen_net 写道
shellwell 写道
异常简单;EntityA,EntityB;
有一个one-to-many的关系从EntityA到EntityB;
EntityA a = new EntityA();
EntityB b = new EntityB();
a.add(b);
entityManager.persist(a);
entityManager.flush();
完了。
报错是parent Key not found;code=2291, state=23000;
以前业务不得问题;现在出这个有点莫名其妙;感觉JPA也不得那么次嘛。


请问你用什么做的事务管理
我使用Spring的注解事务,这种关联是经常使用,从来没有碰到过这个问题

EJB容器自动管理的。
0 请登录后投票
   发表时间:2012-06-05  
shellwell 写道
simen_net 写道

请问你用什么做的事务管理
我使用Spring的注解事务,这种关联是经常使用,从来没有碰到过这个问题

EJB容器自动管理的。

这个我倒没有测试过,手头上也没有环境可以测试····
0 请登录后投票
   发表时间:2012-06-06   最后修改:2012-06-06
shellwell 写道
simen_net 写道
shellwell 写道
哥们,问个问题;
我用这个持久化主表对象,因为级联关系会接着持久化子表。
但是这个JPA好像不能保证这个持久化的先后顺序,有时会出现先持久化子表,导致找不到外键找不到(parent key not found);这个bug以前的业务中就没出现过,我就纳闷为什么突然会在批处理的时候会出现。
今儿做了个简单测试,写了一个很简单的例子,居然也有概率出现这个问题
这个在网上有看添加个@ForeignKey但是这个不是标准;
另外还可以整个撒配置<property...../>但是这个表的级联关系忒复杂,很多表建得不规范,又经过了很多轮测试,不得让随便改的,这个也基本用不起。
对这个你有撒看法,有撒解决方案没?


这个问题我还真没有遇到过,我也没有用过非常复杂的数据库测试。
能不能把你写的测试代码和数据库发给我测试一下

simennet@gmail.com

异常简单;EntityA,EntityB;
有一个one-to-many的关系从EntityA到EntityB;
EntityA a = new EntityA();
EntityB b = new EntityB();
a.add(b);
entityManager.persist(a);
entityManager.flush();
完了。
报错是parent Key not found;code=2291, state=23000;
以前业务不得问题;现在出这个有点莫名其妙;感觉JPA也不得那么次嘛。

最近几天学了点jpa
onetomany, owning side 是many端(双向关联的时候),foreign key在many那里, 你要persist B估计才行
0 请登录后投票
   发表时间:2012-06-06  
shellwell 写道
simen_net 写道

请问你用什么做的事务管理
我使用Spring的注解事务,这种关联是经常使用,从来没有碰到过这个问题

EJB容器自动管理的。

楼上说的有道理,建议把映射的源码贴出来看看是不是配置错误了
0 请登录后投票
   发表时间:2012-06-06  
public class AEntity implements Serializable {
  @Id
  @Column(name="A_ID", nullable = false)
  private Long aId;

  @OneToMany(mappedBy = "bEntity", fetch=FetchType.LAZY, cascade = {CascadeType.PERSIST,CascadeType.REMOVE})
  private List<BEntity> bEntityList;
}

public class BEntity implements Serializable {
    @Id
    @Column(name = "A_ID", nullable = false, insertable = false,
            updatable = false)
    private Long aId;

    @ManyToOne
    @JoinColumn(name = "A_ID",
                referencedColumnName = "A_ID")
    private AEntity aEntity;
}

相关联的就这样.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics