在休眠中切换外键不起作用

时间:2017-07-28 13:12:10

标签: java hibernate spring-boot

TLDR;

我使用弹簧靴和jpa。

我想切换对象的外键,在这种情况下只需切换车辆的类别。

但是当我尝试这样做时,hibernate将其解释为好像我试图更改类别对象的主键而不是仅仅切换外键而我得到此错误

org.hibernate.HibernateException:identifier of an instance of abc.package.mode.Category was altered from 1 to 2

我有一个实体类别,我只使用它来分类车辆实体对象。

@Entity
public class Category {

    @Id
    private Long id;

    private String name;
}

这是需要分类的Vehicle类。

@Entity
public class Vehicle {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator="dish_seq")
    private Long id;

    private String name;

    private Integer price;

    @ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.DETACH)
    private Category category;

}

让我们说有3个类别,

  1. '轿车'
  2. '转换'
  3. '两厢'
  4. 如果我有车对象, Nissan-PT76,$ 30000,类别:[id:1,名称:Sedan]

    当我尝试手动将类别更改为[id:2,name:Convertible]并坚持下去时,我得到了

    org.hibernate.HibernateException:identifier of an instance of abc.package.mode.Category was altered from 1 to 2
    

    我无法从一个现有对象切换到另一个现有对象。我试图在互联网上查一下这个但是我找不到合适的关键词在hibernate中搜索这种关系,还是根本不允许这种关系呢?

1 个答案:

答案 0 :(得分:0)

将列引用添加到Vehicle类

中的Category字段
@JoinColumn(name = "category_id", nullable = false)