ORA-01400:不能将null插入(TABLE.COLUMN)(Hibernate) [英] ORA-01400: Cannot insert null into (TABLE.COLUMN) (Hibernate)

查看:337
本文介绍了ORA-01400:不能将null插入(TABLE.COLUMN)(Hibernate)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是hibernate 4.3,oracle 11:



当我想插入一个雇员时,(它与一个类别有一对多的关系许多员工)),首先我将一个类别插入到数据库中,然后尝试将一个员工插入数据库并获取一个异常,这些实体的代码由hibernate生成,因此我不知道错在哪里,问题似乎是,当我插入一个员工时,Hibernate没有插入ID_CAT,我做了什么错误?我也尝试从休眠生成表,但同样给我一个错误,谢谢你的关注,我希望你可以帮助我!
(类别和员工都与实体企业相关,但这部分工作正常)



例外:

  abr 27,2016 11:11:58 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
WARN:SQL错误:1400,SQLState:23000
abr 27,2016 11:11:58 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
错误:ORA-01400:no se puede realizar unainserciónNULL en(WSPUSER。 TM_EMPLEADOS。ID_CAT)

abr 27,2016 11:11:58 AM org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO:HHH000010:On release批处理仍包含JDBC语句
错误org.hibernate.exception.ConstraintViolationException:无法执行语句
线程main中的异常org.hibernate.TransactionException:事务未成功启动
在组织中。 hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:172)
在tws.hibernate。 dao.GenericDAO.endTransaction(GenericDAO.java:59)
at tws.hibernate.dao.GenericDAO.insert(GenericDAO.java:88)
at TwsTestRunner.insertarEmpleado(TwsTestRunner.java:289)$ b $ TwsTestRunner.main(TwsTestRunner.java:27)

ENTITYEMPLOYEES:

  @Entity 
@Table(name =TM_EMPLEADOS)
public class TmEmpleados implements java.io.Serializable {

private TmEmpleadosId id;
私人TmEmpresas tmEmpresas;
私人TmCategoria tmCategoria;
private String nombre;

public TmEmpleados(){
}

public TmEmpleados(TmEmpleadosId id,TmEmpresas tmEmpresas,TmCategoria tmCategoria,String nombre){
this.id = ID;
this.tmEmpresas = tmEmpresas;
this.tmCategoria = tmCategoria;
this.nombre = nombre;
}

@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name =idEmple,column = @Column(name =ID_EMPLE,nullable = false ,长度= 25)),
@AttributeOverride(name =mand,column = @Column(name =MAND,nullable = false,length = 3)),
@AttributeOverride(name = idEmp,column = @Column(name =ID_EMP,nullable = false,length = 6))})
public TmEmpleadosId getId(){
return this.id;
}

public void setId(TmEmpleadosId id){
this.id = id;

$ b @ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name =ID_CAT,referencedColumnName =ID_CAT,nullable = false,insertable = false,updatable = false),
@JoinColumn(name =ID_EMP,referencedColumnName =ID_EMP,nullable = false,insertable = false,updatable = false) (name =MAND,referencedColumnName =MAND,nullable = false,insertable = false,updatable = false)})
public TmCategoria getTmCategoria(){
return this.tmCategoria;
}

public void setTmCategoria(TmCategoria tmCategoria){
this.tmCategoria = tmCategoria;

$ b @ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name =ID_EMP,referencedColumnName =ID_EMP,nullable = false,insertable = false,updatable = false),
@JoinColumn(name =MAND,referencedColumnName =MAND,nullable = false,insertable = false,updatable = false)})
public TmEmpresas getTmEmpresas(){
return this.tmEmpresas;


@Column(name =NOMBRE,nullable = false,length = 50)
public String getNombre(){
return this.nombre;
}

public void setNombre(String nombre){
this.nombre = nombre;




$ b

实体类别:

  @Entity 
@Table(name =TM_CATEGORIA)
public class TmCategoria implements java.io.Serializable {

私人TmCategoriaId ID;
private String descripcion;
私人套餐< TmEmpleados> tmEmpleadoses = new HashSet< TmEmpleados>(0);
$ b $ public TmCategoria(){
}

public TmCategoria(TmCategoriaId id,String descripcion){
this.id = id;
this.descripcion = descripcion;
}

public TmCategoria(TmCategoriaId id,String descripcion,Set< TmEmpleados> tmEmpleadoses){
this.id = id;
this.descripcion = descripcion;
this.tmEmpleadoses = tmEmpleadoses;
}

@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name =idCat,column = @Column(name =ID_CAT,nullable = false ,长度= 3)),
@AttributeOverride(name =idEmp,column = @Column(name =ID_EMP,nullable = false,length = 6)),
@AttributeOverride(name = mand,column = @Column(name =MAND,nullable = false,length = 3))})
public TmCategoriaId getId(){
return this.id;
}

public void setId(TmCategoriaId id){
this.id = id;


@Column(name =DESCRIPCION,nullable = false,length = 50)
public String getDescripcion(){
return this.descripcion;
}

public void setDescripcion(String descripcion){
this.descripcion = descripcion;
}

@OneToMany(fetch = FetchType.LAZY,targetEntity = TmEmpleados.class,mappedBy =tmCategoria)
public Set< TmEmpleados> getTmEmpleadoses(){
return this.tmEmpleadoses;
}

public void setTmEmpleadoses(Set< TmEmpleados> tmEmpleadoses){
this.tmEmpleadoses = tmEmpleadoses;
}

}

我编辑了hibernate config来显示sql和控制台显示了这一点:

  abr 28,2016 10:55:39 AM org.hibernate.validator.internal.util.Version < clinit> 
INFO:HV000001:Hibernate Validator 5.1.3.Final
Hibernate:select tmcategori_.ID_CAT,tmcategori_.ID_EMP,tmcategori_.MAND,tmcategori_.DESCRIPCION as DESCRIPCION4_6_ from WSPUSER.TM_CATEGORIA tmcategori_ where tmcategori_.ID_CAT =?和tmcategori_.ID_EMP =?和tmcategori_.MAND =?
Hibernate:从WSPUSER.TM_EMPRESAS tmempresas_中选择tmempresas_.ID_EMP,tmempresas_.MAND,tmempresas_.DESCRIPCION作为DESCRIPCION5_25_,其中tmempresas_.ID_EMP =?和tmempresas_.MAND =?
Hibernate:插入WSPUSER.TM_EMPLEADOS(NOMBRE,ID_EMP,ID_EMPLE,MAND)值(?,?,?,?)
abr 28,2016 10:55:40 AM org.hibernate.engine。 jdbc.spi.SqlExceptionHelper logExceptions
WARN:SQL错误:1400,SQLState:23000
abr 28,2016 10:55:40 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR:ORA-01400:no se puede realizar unainserciónNULL en(WSPUSER。TM_EMPLEADOS。ID_CAT)

abr 28,2016 10:55:40 AM org.hibernate.engine .jdbc.batch.internal.AbstractBatchImpl版本
INFO:HHH000010:批量发布时仍包含JDBC语句
线程main中的异常org.hibernate.TransactionException:事务未成功启动
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:172)
at tws.hibernate.dao.GenericDAO.endTransaction(GenericDAO.java:59)
at tws.hibernate .dao.GenericDAO.insert(GenericDAO.java:88)

I'm using hibernate 4.3, oracle 11:

When I want to insert an employee, (it have a relationship one to many with category (one category have many employees)), first I Insert a category to db, then I try to insert an employee to the db and get an exception, the code of the entities was generated by hibernate, so I don't know what's wrong, The problem seems to be that Hibernate is not inserting ID_CAT when I'm inserting an employee, what im doing wrong? I also tried to generate tables from hibernate but gives me the same error, thanks for your attention and I hope you can help me! (category and employees are both related with entity "enterprise", but this part works well)

Exception:

    abr 27, 2016 11:11:58 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1400, SQLState: 23000
abr 27, 2016 11:11:58 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ORA-01400: no se puede realizar una inserción NULL en ("WSPUSER"."TM_EMPLEADOS"."ID_CAT")

abr 27, 2016 11:11:58 AM org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
Error org.hibernate.exception.ConstraintViolationException: could not execute statement
Exception in thread "main" org.hibernate.TransactionException: Transaction not successfully started
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:172)
at tws.hibernate.dao.GenericDAO.endTransaction(GenericDAO.java:59)
at tws.hibernate.dao.GenericDAO.insert(GenericDAO.java:88)
at TwsTestRunner.insertarEmpleado(TwsTestRunner.java:289)
at TwsTestRunner.main(TwsTestRunner.java:27)

ENTITY "EMPLOYEES":

@Entity
@Table(name = "TM_EMPLEADOS")
public class TmEmpleados implements java.io.Serializable {

    private TmEmpleadosId id;
    private TmEmpresas tmEmpresas;
    private TmCategoria tmCategoria;
    private String nombre;

    public TmEmpleados() {
    }

    public TmEmpleados(TmEmpleadosId id,TmEmpresas tmEmpresas, TmCategoria tmCategoria,String nombre) {
        this.id = id;
        this.tmEmpresas = tmEmpresas;
        this.tmCategoria = tmCategoria;
        this.nombre = nombre;
    }

    @EmbeddedId
    @AttributeOverrides({
            @AttributeOverride(name = "idEmple", column = @Column(name = "ID_EMPLE", nullable = false, length = 25)),
            @AttributeOverride(name = "mand", column = @Column(name = "MAND", nullable = false, length = 3)),
            @AttributeOverride(name = "idEmp", column = @Column(name = "ID_EMP", nullable = false, length = 6)) })
    public TmEmpleadosId getId() {
        return this.id;
    }

    public void setId(TmEmpleadosId id) {
        this.id = id;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "ID_CAT", referencedColumnName = "ID_CAT", nullable = false, insertable = false, updatable = false),
            @JoinColumn(name = "ID_EMP", referencedColumnName = "ID_EMP", nullable = false, insertable = false, updatable = false),
            @JoinColumn(name = "MAND", referencedColumnName = "MAND", nullable = false, insertable = false, updatable = false) })
    public TmCategoria getTmCategoria() {
        return this.tmCategoria;
    }

    public void setTmCategoria(TmCategoria tmCategoria) {
        this.tmCategoria = tmCategoria;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "ID_EMP", referencedColumnName = "ID_EMP", nullable = false, insertable = false, updatable = false),
            @JoinColumn(name = "MAND", referencedColumnName = "MAND", nullable = false, insertable = false, updatable = false) })
    public TmEmpresas getTmEmpresas() {
        return this.tmEmpresas;
    }

    @Column(name = "NOMBRE", nullable = false, length = 50)
    public String getNombre() {
        return this.nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
}

ENTITY "CATEGORY":

@Entity
@Table(name = "TM_CATEGORIA")
public class TmCategoria implements java.io.Serializable {

    private TmCategoriaId id;
    private String descripcion;
    private Set<TmEmpleados> tmEmpleadoses = new HashSet<TmEmpleados>(0);

    public TmCategoria() {
    }

    public TmCategoria(TmCategoriaId id, String descripcion) {
        this.id = id;
        this.descripcion = descripcion;
    }

    public TmCategoria(TmCategoriaId id, String descripcion,Set<TmEmpleados> tmEmpleadoses) {
        this.id = id;
        this.descripcion = descripcion;
        this.tmEmpleadoses = tmEmpleadoses;
    }

    @EmbeddedId
    @AttributeOverrides({
            @AttributeOverride(name = "idCat", column = @Column(name = "ID_CAT", nullable = false, length = 3)),
            @AttributeOverride(name = "idEmp", column = @Column(name = "ID_EMP", nullable = false, length = 6)),
            @AttributeOverride(name = "mand", column = @Column(name = "MAND", nullable = false, length = 3)) })
    public TmCategoriaId getId() {
        return this.id;
    }

    public void setId(TmCategoriaId id) {
        this.id = id;
    }

    @Column(name = "DESCRIPCION", nullable = false, length = 50)
    public String getDescripcion() {
        return this.descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    @OneToMany(fetch = FetchType.LAZY, targetEntity = TmEmpleados.class, mappedBy = "tmCategoria")
    public Set<TmEmpleados> getTmEmpleadoses() {
        return this.tmEmpleadoses;
    }

    public void setTmEmpleadoses(Set<TmEmpleados> tmEmpleadoses) {
        this.tmEmpleadoses = tmEmpleadoses;
    }

}

I edited hibernate config to show sql and console showed this:

abr 28, 2016 10:55:39 AM org.hibernate.validator.internal.util.Version <clinit>
INFO: HV000001: Hibernate Validator 5.1.3.Final
        Hibernate: select tmcategori_.ID_CAT, tmcategori_.ID_EMP, tmcategori_.MAND, tmcategori_.DESCRIPCION as DESCRIPCION4_6_ from WSPUSER.TM_CATEGORIA tmcategori_ where tmcategori_.ID_CAT=? and tmcategori_.ID_EMP=? and tmcategori_.MAND=? 
    Hibernate: select tmempresas_.ID_EMP, tmempresas_.MAND, tmempresas_.DESCRIPCION as DESCRIPCION5_25_ from WSPUSER.TM_EMPRESAS tmempresas_ where tmempresas_.ID_EMP=? and tmempresas_.MAND=?
    Hibernate: insert into WSPUSER.TM_EMPLEADOS ( NOMBRE, ID_EMP, ID_EMPLE, MAND) values (?, ?, ?, ?)
abr 28, 2016 10:55:40 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1400, SQLState: 23000
abr 28, 2016 10:55:40 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: ORA-01400: no se puede realizar una inserción NULL en ("WSPUSER"."TM_EMPLEADOS"."ID_CAT")

abr 28, 2016 10:55:40 AM org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
Exception in thread "main" org.hibernate.TransactionException: Transaction not successfully started
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:172)
    at tws.hibernate.dao.GenericDAO.endTransaction(GenericDAO.java:59)
    at tws.hibernate.dao.GenericDAO.insert(GenericDAO.java:88)

解决方案

I solved the issue modifying the database: I made all foreign key columns part of the primary key of the referenced table and child columns related too, so now hibernate properly generate the sql, maybe is not the cleanest way but works.

这篇关于ORA-01400:不能将null插入(TABLE.COLUMN)(Hibernate)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆