2017-07-28 52 views
0

TLDR;在休眠状态下切换外键不起作用

我使用的是spring boot和jpa。

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

但是,当我尝试这样做,休眠其解释为,如果我试图改变类对象的主键,而不是仅仅开关外键,我得到这个错误

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; 
} 

这是需要分类的车辆类。

@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. '两厢'

如果我有一辆车对象, Nissan- PT76,$ 30000,类别:[id:1,name:Sedan]

当我尝试改变类别手动[ID:2,名称:换股]和坚持它,我得到

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

我不能从一个现有的对象切换到另一个。我试图在互联网上查看这些信息,但是我无法找到正确的关键字来搜索hibernate中的这种关系,还是根本不允许这种关系?

回答

0

到您的类别字段添加列引用在Vehicle类

@JoinColumn(name = "category_id", nullable = false) 
+0

不,这还不让我改变车辆的类别 – user2049132