首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带Eclipselink的eclipselink尝试插入父表,

带Eclipselink的eclipselink尝试插入父表,
EN

Stack Overflow用户
提问于 2016-11-10 16:26:19
回答 2查看 288关注 0票数 0

我被困在以下问题上:

每次我尝试创建一个块时,eclipselink都会尝试插入一个condominio记录(应该为null ),当我在一个简单的java项目中运行相同的代码(没有spring)时,它可以正常工作,但是在web项目中,它一直试图插入“父”表中。

有什么原因可以解释为什么eclipselink试图强制建立双向关系呢?

实体

鸡奸

代码语言:javascript
复制
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "idcondominio")
private Integer idcondominio;
@Basic(optional = false)
@Column(name = "nomecond")
private String nomecond;
@Column(name = "cnpjcond")
private Integer cnpjcond;
@OneToMany(mappedBy = "condominio")
private Collection<Bloco> blocoCollection;

布洛克

代码语言:javascript
复制
private static final long serialVersionUID = 1L;
@EmbeddedId
protected BlocoPK blocoPK;
@Basic(optional = false)
@Column(name = "nomebloco")
private String nomebloco;
@Column(name = "numero")
private String numero;
@JoinColumn(name = "condominio_idcondominio", referencedColumnName = "idcondominio", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Condominio condominio;

==============================创建方法

代码语言:javascript
复制
public void create(Bloco bloco) throws PreexistingEntityException, Exception {
    if (bloco.getBlocoPK() == null) {
        bloco.setBlocoPK(new BlocoPK());
    }
    bloco.getBlocoPK().setCondominioIdcondominio(bloco.getCondominio().getIdcondominio());
    EntityManager em = null;
    try {
        em = getEntityManager();
        em.getTransaction().begin();
        Condominio condominio = bloco.getCondominio();
        if (condominio != null) {
            condominio = em.getReference(condominio.getClass(), condominio.getIdcondominio());
            bloco.setCondominio(condominio);
        }
        em.persist(bloco);
        if (condominio != null) {
            condominio.getBlocoCollection().add(bloco);
            condominio = em.merge(condominio);
        }
        em.getTransaction().commit();
    } catch (Exception ex) {
        if (findBloco(bloco.getBlocoPK()) != null) {
            throw new PreexistingEntityException("Bloco " + bloco + " already exists.", ex);
        }
        throw ex;
    } finally {
        if (em != null) {
            em.close();
        }
    }
}

=========================控制器方法

代码语言:javascript
复制
@RequestMapping(value = "cadbloco", method = RequestMethod.POST)
public String cadbloco(@ModelAttribute(value = "Bloco") Bloco bloco, @RequestParam("condid") int idcond ) throws Exception {

    BlocoJpaController jpa = new BlocoJpaController();
    Condominio c = new Condominio();
    c.setIdcondominio(idcond);
    jpa.create(bloco);

    return ("redirect:bloco.htm");

}

=====================

ype异常报告

消息请求处理失败;嵌套异常为javax.persistence.RollbackException: exception EclipseLink-4002EclipseLink-4002

说明服务器遇到一个内部错误,无法满足此请求。

异常

org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为javax.persistence.RollbackException: exception EclipseLink-4002:org.eclipse.persistence.exceptions.DatabaseException内部异常: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:列'nomecond‘不能为空错误代码: 1048调用:插入condominio (cnpjcond,nomecond)值(?,?)绑定org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863) javax.servlet.http.HttpServlet.service(HttpServlet.java:648) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket绑定=> 2参数绑定查询: InsertObjectQuery(Entity.Condominio idcondominio=null )org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) ( server.WsFilter.doFilter(WsFilter.java:52) )

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-18 02:17:46

这是正确的方法,我没有在块中设置condominio,所以当我尝试创建一个新的块时,它没有一个condominio。

我有时会犯这样的错误,但还是要感谢你的帮助。

==================================================================

@RequestMapping(value = "cadbloco",method = RequestMethod.POST)公共字符串cadbloco(@ModelAttribute(value = " Bloco ") bloco,@RequestParam("condid") int idcond )引发异常{

代码语言:javascript
复制
    BlocoJpaController jpa = new BlocoJpaController();
    Condominio c = new Condominio();
    c.setIdcondominio(idcond);
    bloco.setCondominio(c);
    jpa.create(bloco);

    return ("redirect:bloco.htm");

}
票数 0
EN

Stack Overflow用户

发布于 2016-11-10 17:10:10

异常显示"nomecond“值为null。因此,在控制器中,如果添加以下代码

C.setNomeCond(“某些值”);

这应该能解决问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40532452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档