【问题标题】:Insertion failure on table , make a new entry on foreign table also在表上插入失败,也在外表上创建一个新条目
【发布时间】:2019-06-07 14:15:29
【问题描述】:

我正在使用带有 hibernate 作为 ORM 的 postgres 数据库。 我有一个名为区的表,带有外键分区。

但插入后,它会在分区表和分区表上创建新条目。首先,它在划分表上创建一个新条目(当时创建了新的 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>

【问题讨论】:

  • 请提供Division 模型和控制器或服务中的代码,您将在其中将District 传递给dao。

标签: postgresql hibernate spring-mvc jsp


【解决方案1】:

您似乎无法将 Division 对象设置为您的子表 District 对象。使用所选Divisionid 查找超类的对象。然后将对象设置为District 对象。之后,保存名为District 的子表对象。

完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2017-10-16
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多