我正在将postgres数据库与hibernate一起用作ORM。 我有一个名为District的表,带有外键分区。
但是插入后,它会在分区表和分区表上都进行新输入。首先,它在除法表上创建一个新条目(此时将创建新的ID)。然后,使用新的划分ID在区表上创建新条目。
CREATE TABLE district(
id SERIAL,
division_id INTEGER REFERENCES division(id),
name varchar(30),
PRIMARY KEY (id)
);
这是我的模型:
@Entity
@Table(name = "district")
public class District implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private Integer id;
@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name="division_id")
private Division division;
@Column(name="name")
private String name;
// getter setter
我的控制器:
@GetMapping(value = "/createdistrict")
public ModelAndView createdistrict(Locale locale, Model model) {
List<Division> allDivisionList = new ArrayList<Division>();
allDivisionList = this.districtService.listdivisions() ;
Map<Integer,String> allDivision = new LinkedHashMap<Integer,String>();
for( int i=0 ; i < allDivisionList.size() ; i++) {
allDivision.put(allDivisionList.get(i).getId() , allDivisionList.get(i).getName());
}
return new ModelAndView("createdistrict" , "allDivision" , allDivision);
}
DAO:
@Override
public void adddistrict(District p) {
Session session = this.sessionFactory.getCurrentSession();
session.saveOrUpdate(p);
logger.info("District saved successfully, Phone Details=" + p);
}
我的jsp页面:
<tr>
<td>
Division
</td>
<td>
<select id="division" name="division">
<c:forEach items="${allDivision}" var="allDivision">
<option value="${allDivision.key}">${allDivision.value }</option>
</c:forEach>
</select>
</td>
</tr>
答案 0 :(得分:1)
似乎无法将Division
对象设置为子表的District
对象。使用选定的id
中的Division
查找超类的对象。然后将对象设置为District
对象。然后,保存名为District
的子表对象。
完成。