Hibernate添加具有子实体标识的实体 [英] Hibernate add entity with child entity id

查看:107
本文介绍了Hibernate添加具有子实体标识的实体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

My Objects



State.java

 实体
@Table(name =STATE)
public class State {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
私人长ID;

@Column(name =NAME,nullable = false)
私有字符串名称;
}

City.java

  @Entity 
@Table(name =CITY)
public class City extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
私有长ID;

@Column(name =NAME,nullable = false)
私有字符串名称;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name =STATE_ID,nullable = false)
私有状态;
}

我想添加一个城市名称和州名称的新城市。要添加一个新的城市,我执行


  • 从状态表中获取状态。 State state =(State)hibernateManager.get(State.class,id);

  • 在城市设置状态。 city.setState(state)

  • 在城市执行保存操作。 hibernateManager.save(city);



在城市桌上只有Id将会是商店。那么是否有任何方法可以在不调用状态表的情况下简单地 save(city)将执行相同的任务。

解决方案

您可以单独使用STATE_ID列并映射到状态。然后为了保存城市,您可以简单地设置stateId。请注意@JoinColumn(insertable = false,updatable = false)中使用的属性,以避免着名的重复列异常。

  @ManyToOne (fetch = FetchType.EAGER)
@JoinColumn(name =STATE_ID,insertable = false,updatable = false)
私有状态;

@Column(name =STATE_ID)
private Long stateId;


My Objects

State.java

Entity
@Table(name = "STATE")
public class State {

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

    @Column(name = "NAME", nullable = false)
    private String name;
}

City.java

@Entity
@Table(name = "CITY")
public class City extends BaseEntity {

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

    @Column(name = "NAME", nullable = false)
    private String name;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "STATE_ID", nullable = false)
    private State state;
}

I want to add a new city where i have city name and state id. To add a new city I perform

  • get state from state table. State state = (State) hibernateManager.get(State.class, id);
  • Set state in city. city.setState(state)
  • Perform save Operation on city. hibernateManager.save(city);

As I have the state id and in city table only Id is going to be store. So Is there is any way so that without making a call to state table simply save(city) will do the same task.

解决方案

You can use STATE_ID column individually and for mapping to state. Then for saving city you can simply set the stateId. Note the attributes used in @JoinColumn (insertable = false, updatable=false) to avoid the famous repeated column exception.

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "STATE_ID", insertable = false, updatable=false)
private State state;

@Column(name = "STATE_ID")
private Long stateId;

这篇关于Hibernate添加具有子实体标识的实体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆