Hibernate 中annotations(注解开发)的@OneToMany 一对多双向关联映射后,出现的jar包冲突问题

(Hibernate 框架 二 )

一、Hibernate 注解开发时,一对多关系映射时发生了jar包冲突问题

(1)以客户和订单为例模拟问题出现的情景

一方:(客户)

@Entity
@Table(name="customers")
public class Customer {

    @Id
    //AUTO相当于 native
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;

    private String name;

    //targetEntity 类似于<one-to-many class=""/> 要映射的对方的类
    //mappedBy 作用相当于inverse="true" 在对方类中关联自己的属性
    @OneToMany(targetEntity = Order.class,mappedBy="customer")
    @Cascade(value={CascadeType.SAVE_UPDATE})
    private Set<Order> orders = new HashSet<Order>();

    ......(提供setter和getter函数,这里省略)

}

多方:(客户)

@Entity
@Table(name="orders")
public class Order {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;

    private String address;

    @ManyToOne(targetEntity=Customer.class)
    @JoinColumn(name="customer_id")
    private Customer customer;

    ......(提供setter和getter函数,这里省略)

}

测试代码:

  @Test
        public void demo3(){

          //1,开启Session
            Session session =HibernateUtils.getSession();
            Transaction transaction =session.beginTransaction();

            //客户 
            Customer customer = new Customer();
            customer.setName("小明");

            //订单1
            Order order1 = new Order();
            order1.setAddress("杭州大厦");

            //订单2
            Order order2 =new Order();
            order2.setAddress("北京三里屯");

            //保存订单和客户
            session.save(customer);

            //建立关联关系
            customer.getOrders().add(order1);
            customer.getOrders().add(order2);

            order1.setCustomer(customer);
            order2.setCustomer(customer);

            transaction.commit();
            session.close();
      }

运行后报错:

java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z

这里写图片描述

(2)报错原因

使用hibernate annotations(注解开发)的@OneToMany 一对多双向关联后出现异常,出现这种异常通常是由于Myeclipse的javaee.jar 版本较低,与Hibernate等自带的JPA出现了冲突。

这里写图片描述

简而言之, Hibernate 3.6.10 与 javaee.jar 包(上图javaee.jar)的中的一些类库产生冲突造成的。(而这里是persistence 文件夹发生了冲突,下面会提到)

二、解决方法

(1)在MyEclipse的安装路径下找到这个jar包:

D:\Java\myeclipse\Myeclipse\Common\plugins\com.genuitec.eclipse.j2eedt.core_10.5.0.me201207171805\data\libraryset\EE_5\javaee.jar

如下:

这里写图片描述

(2)把Javaee.jar复制出来,用压缩包格式打开

在 javax 中找到 persistence 文件夹,并删除即可

这里写图片描述

(3)把修改后的 Javaee.jar 放到原位置,重新打开MyEclipse,运行正确

注:为了方便先把为修改的jar包备份一下,以防以后会用到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值