当前位置: 首页 > 知识库问答 >
问题:

无法添加或更新子行:外键约束失败

慕佑运
2023-03-14

我有两个表,当我试图保存通常的实体,扔

组织。springframework。刀。DataIntegrityViolationException:无法添加或更新子行:外键约束失败(formato_Inscripionroles_Usario,约束roles_Usario_ibfk_1外键(ID_UsarioCLAVE_Usario)引用UsariosIDCLAVE));SQL[n/a];约束[null];嵌套的异常是org。冬眠例外ConstraintViolationException:无法添加或更新子行:外键约束失败(formato_Inscripionroles_Usario,constraintroles_Usario_ibfk_1外键(ID_UsarioCLAVE_Usario)参考UsariosID )。springframework。奥姆。冬眠4。SessionFactoryUtils。org上的convertHibernateAccessException(SessionFactoryUtils.java:163)。springframework。奥姆。冬眠4。HibernateTransactionManager。org上的convertHibernateAccessException(HibernateTransactionManager.java:730)。springframework。奥姆。冬眠4。HibernateTransactionManager。org上的doCommit(HibernateTransactionManager.java:592)。springframework。交易支持AbstractPlatformTransactionManager。processCommit(AbstractPlatformTransactionManager.java:761)位于org。springframework。交易支持AbstractPlatformTransactionManager。commit(AbstractPlatformTransactionManager.java:730)`CREATE TABLE ROLES(CLAVE VARCHAR(10)UNIQUE PRIMARY KEY,description VARCHAR(50))ENGINE=INNODB;

CREATE TABLE USUARIOS( ID INT AUTO_INCREMENT,   CLAVE CHAR(10) UNIQUE,
            USUARIO VARCHAR(10),
            PASSWORD VARCHAR(10) NOT NULL,      
            CLAVE_TIPO_USUARIO CHAR(10) NOT NULL,                        
                    PRIMARY KEY(ID,CLAVE),
            FOREIGN KEY(CLAVE_TIPO_USUARIO) REFERENCES TIPO_USUARIO(CLAVE) )ENGINE=INNODB;

 CREATE TABLE ROLES(    
        CLAVE VARCHAR(10) UNIQUE PRIMARY KEY,
        DESCRIPCION VARCHAR(50)
    )ENGINE=INNODB;

 CREATE TABLE ROLES_USUARIO(    
    CLAVE_ROL VARCHAR(10) ,
    ID_USUARIO INT ,
    CLAVE_USUARIO CHAR(10) ,
    FOREIGN KEY(ID_USUARIO,CLAVE_USUARIO) REFERENCES USUARIOS(ID,CLAVE),
    FOREIGN KEY(CLAVE_ROL) REFERENCES ROLES(CLAVE)
)ENGINE=INNODB;


CREATE TABLE TIPO_USUARIO(
    CLAVE CHAR(10) PRIMARY KEY,
    NOMBRE VARCHAR(10) UNIQUE,
    DESCRIPCION VARCHAR(10)
)ENGINE=INNODB;

我的JPA模型

@Embeddable
public class UsuariosId implements java.io.Serializable {

    private int id;
    private String clave;

    @GeneratedValue (strategy = GenerationType.IDENTITY)
    @Column(name = "ID" )
    public int getId() {
        return this.id;
    }

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

    @Column(name = "CLAVE", length = 10)
    public String getClave() {
        return this.clave;
    }

    public void setClave(String clave) {
        this.clave = clave;
    }
}

用户实体

@Entity
@Table(name = "USUARIOS", catalog = "", uniqueConstraints = @UniqueConstraint(columnNames = "CLAVE"))
public class Usuarios implements java.io.Serializable {

    private UsuariosId id;

    private Set<Roles> roles;

    //private String claveTipoUsuario;
    private List<Asigna> asigna;

    public Usuarios() {
    }

    @EmbeddedId
    @AttributeOverrides({ @AttributeOverride(name = "id", column = @Column(name = "ID")),
            @AttributeOverride(name = "clave", column = @Column(name = "CLAVE", unique = true, length = 10)) })
    public UsuariosId getId() {
        return this.id;
    }

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

    @Column(name = "USUARIO", length = 10)
    public String getUsuario() {
        return this.usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    @Column(name = "PASSWORD", nullable = false, length = 10)
    public String getPassword() {
        return this.password;
    }


    @ManyToMany(targetEntity=Roles.class,
            cascade=CascadeType.ALL)
    @JoinTable(name="ROLES_USUARIO", joinColumns={@JoinColumn(name = "ID_USUARIO", referencedColumnName="ID"),
                                                  @JoinColumn(name="CLAVE_USUARIO",referencedColumnName="CLAVE")}
                                        , inverseJoinColumns={@JoinColumn(name="CLAVE_ROL",referencedColumnName="CLAVE")})  
    public Set<Roles> getRoles() {
        return roles;
    }

    public void setRoles(Set<Roles> roles) {
        this.roles = roles;
    }




@ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="CLAVE_TIPO_USUARIO")
    public TipoUsuario getClavetipousuario() {
        return clavetipousuario;
    }

    public void setClavetipousuario(TipoUsuario clavetipousuario) {
        this.clavetipousuario = clavetipousuario;
    }


}

角色实体

 @Entity
    @Table(name = "ROLES", catalog = "", uniqueConstraints = @UniqueConstraint(columnNames = "CLAVE"))
    public class Roles implements java.io.Serializable {

        private String clave;
        private String descripcion;
        private Set<Usuarios> usuarios;

        public Roles() {
        }

        public Roles(String clave, String descripcion) {
            this.clave = clave;
            this.descripcion = descripcion;
        }

        @Id
        @Column(name = "CLAVE", unique = true, length = 30)
        public String getClave() {
            return this.clave;
        }

        public void setClave(String clave) {
            this.clave = clave;
        }

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

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

        //@MapsId("id")
        @ManyToMany(mappedBy="roles")
        public Set<Usuarios> getUsuarios() {
            return usuarios;
        }

        public void setUsuarios(Set<Usuarios> usuarios) {
            this.usuarios = usuarios;
        }
        }


  @Entity
@Table(name = "TIPO_USUARIO", catalog = "", uniqueConstraints = @UniqueConstraint(columnNames = "NOMBRE"))
public class TipoUsuario implements java.io.Serializable {

    private String clave;
    private String nombre;
    private String descripcion;
    private List<Usuarios> usuarios;

    public TipoUsuario() {
    }

    public TipoUsuario(String clave) {
        this.clave = clave;
    }

    public TipoUsuario(String clave, String nombre, String descripcion) {
        this.clave = clave;
        this.nombre = nombre;
        this.descripcion = descripcion;
    }

    @Id
    @Column(name = "CLAVE", unique = true, nullable = false, length = 10)
    public String getClave() {
        return this.clave;
    }

    public void setClave(String clave) {
        this.clave = clave;
    }

    @Column(name = "NOMBRE", unique = true, length = 10)
    public String getNombre() {
        return this.nombre;
    }

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

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

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

    @OneToMany(mappedBy="clavetipousuario")
    public List<Usuarios> getUsuarios() {
        return usuarios;
    }

    public void setUsuarios(List<Usuarios> usuarios) {
        this.usuarios = usuarios;
    }


}

My TestClass  

     @Repository
    public class UsuariosDaoTest extends TesteBase {

        private static Logger logger = LoggerFactory.getLogger(UsuariosDaoTest.class);

        Integer inicio; 
        String dato;

        @Autowired
        RolesDao rolesDao;

        @Autowired
        UsuariosDao usuariosdao;

        @Autowired
        TipoUsuarioDao tipousuariodao;

        @Test
        public void testdao(){
            assertNotNull(usuariosdao);
        }

        @Test
        public void testaddDao(){
            Roles rol1 = (Roles) rolesDao.getRolByClave("rol003");
            HashSet roles = new HashSet<Roles>();
            roles.add(rol1);
            Usuarios u = new Usuarios();                
            UsuariosId uid = new UsuariosId();
            uid.setClave("54");

            TipoUsuario tu = (TipoUsuario) tipousuariodao.getTipoUsuarioByClave("3");

            u.setId(uid);
            u.setClavetipousuario(tu);

            Serializable b1 = usuariosdao.add(u);
            u.setRoles(roles);
            usuariosdao.update(u);


        }

共有1个答案

曾光远
2023-03-14

你的桌子看起来不对劲。或者您还没有在这里发布所有的创建表脚本。没有这样的TIPO_USUARIO表格。另外,USUARIO表中没有任何名为CLAVE_TIPO_USUARIO的字段。

 类似资料:
  • 问题内容: 当我不想相互连接两个表时,我得到以下消息:#1452-无法添加或更新子行:外键约束失败....我想从facebook_users表格中连接oauth_uid2(主键)外键为oauth_uid2的错误列表。但是我总是得到这个信息。我已经清除了数据,但没有任何效果。在表users_facebook中,我还有1条记录。 1452-无法添加或更新子行:外键约束失败(。,在更新级联上删除级联时使

  • 我知道在这个问题上有很多问题,但我一直未能解决。我正在做一个图形界面来添加/删除员工和管理缺勤。 我一直在阅读和测试那些建议stackOverflow1,但我不能更改数据库,因为它已经由我们的教授给出了。 来自外键的值已经在表“service”中,我在代码中称之为“department”。 我有以下数据库(对于我得到问题的表): 在应用程序中,您可以看到这里和下面的图片,我必须修改员工数据,并将其

  • 当我不想将两个表相互连接时,我收到消息:#1452 - 无法添加或更新子行:外键约束失败....我想使用外键oauth_uid2将oauth_uid2(主键)从facebook_users选项卡连接到错误选项卡。但我总是收到这个信息。我已经清除了我的数据,但没有任何效果。同样在表中users_facebook我有 1 条记录。 1452-无法添加或更新子行:外键约束失败(., CONSTRAINT

  • 如果我插入: 我用visual studio代码和mysql控制台的源代码编写代码 第一表: 第二表: 第三表: 我收到消息: 错误1452(23000):无法添加或更新子行:外键约束失败(。,约束外键()在更新级联的删除级联上引用() 请帮帮我:(,,thx:)

  • 错误代码:1452。无法添加或更新子行:外键约束失败(.,约束外键()引用()) 我看过其他关于这个话题的帖子,但没有运气。我是不是在监督什么或者知道该怎么做?

  • 我有两张桌子,“预订”和“isBooked”。我想在isBooked表中添加值。但我不断收到错误“无法添加或更新子外键约束失败”。 有人能告诉我为什么在尝试将值插入“isBooked”时会出现此错误吗?