Я использую базу данных postgres с Hibernate в качестве ORM.
У меня есть таблица с названием район с разделением по внешнему ключу.
Но после вставки создается новая запись как в таблице деления, так и в таблице районов. Сначала он создает новую запись в таблице деления (в это время создается новый идентификатор). Затем он создает новую запись в таблице районов с новым идентификатором подразделения.
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>