Hibernate添加具有子实体标识的实体 [英] Hibernate add entity with child entity id
问题描述
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屋!