Ошибка вставки в таблицу, также создайте новую запись в чужой таблице - PullRequest
0 голосов
/ 13 января 2019

Я использую базу данных 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>

create district page

1 Ответ

0 голосов
/ 13 января 2019

Похоже, вы не можете установить Division объект для вашего District объекта, который является вложенной таблицей. Найти объект суперкласса, используя id из выбранного Division. Затем установите объект на District объект. После этого сохраните объект вложенной таблицы с именем District.

Готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...