Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.sql.SQLException:字段不';没有默认值_Java_Mysql_Spring_Jpa - Fatal编程技术网

java.sql.SQLException:字段不';没有默认值

java.sql.SQLException:字段不';没有默认值,java,mysql,spring,jpa,Java,Mysql,Spring,Jpa,调用Spring Data JPA save()方法时,我遇到以下错误: --更新了SQL日志记录-- 下面是我调用save()方法的服务方法: @覆盖 公共联系人addUser(UserForm UserForm){ 字符串编码密码; Contact user=userForm.getUser(); //对密码进行编码 encodedPassword=encoder.encode(userForm.getPassword()); //将编码的密码设置为密码 user.setPassword(e

调用Spring Data JPA save()方法时,我遇到以下错误:

--更新了SQL日志记录--

下面是我调用save()方法的服务方法:

@覆盖
公共联系人addUser(UserForm UserForm){
字符串编码密码;
Contact user=userForm.getUser();
//对密码进行编码
encodedPassword=encoder.encode(userForm.getPassword());
//将编码的密码设置为密码
user.setPassword(encodedPassword);
Set securityRoles=new HashSet();
//获得角色
add(roleDao.findById(userForm.getRoleId());
user.setRoles(securityRoles);
user.setTenantId(securityAccessor.getCurrentLoggedUser().getTenantId());
//现在保存
返回contactDao.save(用户);
}
我已经进行了检查,以确保“用户”对象属性(即firstName、lastName、tenantId)已填充,并且可以确认它们已填充

任何帮助都将不胜感激

以下是剩余的相关代码

联络类别:

@Entity
@Table(name = "contacts")
public class Contact implements UserDetails {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="CON_ID")
    private int id;

    @NotEmpty
    @Column(name="CON_USERNAME")
    private String username;

    //Custom validation is carried out in controller class
    @Column(name="CON_PASSWORD")
    private String password;

    @NotEmpty
    @Column(name="CON_FIRST_NAME")
    private String firstName;

    @Column(name="CON_MIDDLE_NAME")
    private String middleName;

    @NotEmpty
    @Column(name="CON_LAST_NAME")
    private String lastName;

    @OneToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "USER_ROLES", joinColumns = { 
            @JoinColumn(name = "USER_CON_ID") }, inverseJoinColumns = { 
            @JoinColumn(name = "RLE_ID") })
    private Set<Role> roles;


    @Column(name = "TENANT_ENT_ID")
    private int tenantId;

//  @Column(name="ENT_ID")
//  private int enterpriseId;

    @Transient
    private final String PERMISSION_PREFIX = "ROLE_PERM_";

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getMiddleName() {
        return middleName;
    }

    public void setMiddleName(String middleName) {
        this.middleName = middleName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        Set<GrantedAuthorityImpl> authorities = new HashSet<GrantedAuthorityImpl>();
        for (Role role : roles) {
            for (Permission permission : role.getPermissions()) {
                GrantedAuthorityImpl authority = new GrantedAuthorityImpl(PERMISSION_PREFIX + permission.getPermission());
                authorities.add(authority);
            }
        }
        return authorities;
    }

    @Override
    public boolean isAccountNonExpired() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean isAccountNonLocked() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean isEnabled() {
        // TODO Auto-generated method stub
        return true;
    }


    public String getPERMISSION_PREFIX() {
        return PERMISSION_PREFIX;
    }

    public Set<Role> getRoles() {
        return roles;
    }

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

    //custom method
    public boolean hasPermission(String permission) {

        for (Role role : this.roles) {
            for (Permission securityPermission : role.getPermissions()) {
                if (securityPermission.getPermission().equals(permission))
                    return true;
            }
        }

        return false;
    }

    //custom method for testing - to rmeove
    public boolean hasRole(String rle) {

        for (Role role : this.roles) {
            if (role.getRole().equals(rle))
                return true;
        }

        return false;
    }

    public int getTenantId() {
        return tenantId;
    }

    public void setTenantId(int tenantId) {
        this.tenantId = tenantId;
    }
}
@实体
@表(name=“contacts”)
公共类联系人实现UserDetails{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“CON_ID”)
私有int-id;
@空空如也
@列(name=“CON_USERNAME”)
私有字符串用户名;
//自定义验证在控制器类中执行
@列(name=“CON_密码”)
私有字符串密码;
@空空如也
@列(name=“CON\u FIRST\u name”)
私有字符串名;
@列(name=“CON_MIDDLE_name”)
私有字符串名称;
@空空如也
@列(name=“CON_LAST_name”)
私有字符串lastName;
@OneToMany(fetch=FetchType.EAGER)
@JoinTable(name=“USER\u ROLES”,joinColumns={
@JoinColumn(name=“USER\u CON\u ID”)},inverseJoinColumns={
@JoinColumn(name=“RLE_ID”)})
私人设定角色;
@列(name=“承租人”\u ENT\u ID)
私人国际租户;
//@Column(name=“ENT\u ID”)
//私营企业;
@短暂的
私有最终字符串权限\u PREFIX=“ROLE\u PERM”;
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
公共字符串getUsername(){
返回用户名;
}
public void setUsername(字符串用户名){
this.username=用户名;
}
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
公共字符串getFirstName(){
返回名字;
}
public void setFirstName(字符串firstName){
this.firstName=firstName;
}
公共字符串getMiddleName(){
返回中间名;
}
public void setMiddleName(字符串middleName){
this.middleName=middleName;
}
公共字符串getLastName(){
返回姓氏;
}
public void setLastName(字符串lastName){
this.lastName=lastName;
}
@凌驾
公共收藏
显示租户ID列的Mysql“联系人”表的图像:


我刚刚遇到了同样的问题,在我的例子中,问题是我用@NotNull注释标记了实体中的一个属性,并且没有为它提供任何默认值。因此,删除表,删除注释,然后在不使用NotNull约束的情况下构造表,这一切对我来说都很好。Either在不使用NN(notNull)约束的情况下删除表并重建它,或者为TANENT_ENT_ID提供默认值(我不知道如何…在google中查找)将解决您的问题。

对我来说,问题是,我在表中有一个额外的
id
字段,不能为
null
。愚蠢的错误。

在我的例子中,将数据库中的id字段设置为自动增量解决了问题。

在我的例子中,问题是主键列没有设置为
自动增量

我是这样解决的:


更改表格部门修改列id int非空自动增量;

更改表格名称修改列id int主键自动增量


在这种情况下,如果您要添加和自动增量,您必须应用任意一个键,如PK、Notnull等…来解决此问题…

我通过将实体的GenerationType从“IDENTITY”更改为“AUTO”,并在数据库中将我的\u字段更改为“AUTOINCREMENT”属性来解决此问题。

更新属性
**columnDefinition=“int default 1”**
列中的
,默认值为
1

@Column(name = "TENANT_ENT_ID", nullable = false, columnDefinition = "int default 1")
private int tenantId;
另一个配置使用xx.hbm.xml

父项
子项
默认值都提到为
1

@Column(name = "TENANT_ENT_ID", nullable = false, columnDefinition = "int default 1")
private int tenantId;
首先,您需要同时删除子表和父表,然后重新启动服务器(Tomcat)

parent.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping 
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" 
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="com.data.Parent" table="PARENT">
        <id name="parentId" type="long">
            <column name="parentId" default="1"></column>
            <generator class="increment"></generator>
        </id>

    <property name="userId" not-null="true">
        <column name="userId" />
    </property>
    <property name="type" not-null="true" unique="true">
        <column name="type" />
    </property>
</class>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping 
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" 
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="com.data.Child" table="CHILD">
        <id name="childId">
            <column name="childId" default="1"></column>
            <generator class="increment"></generator>
        </id>

    <property name="parentId" column="parentId" />

    <property name="description" not-null="true">
        <column name="description" />
    </property>
</class>

child.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping 
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" 
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="com.data.Parent" table="PARENT">
        <id name="parentId" type="long">
            <column name="parentId" default="1"></column>
            <generator class="increment"></generator>
        </id>

    <property name="userId" not-null="true">
        <column name="userId" />
    </property>
    <property name="type" not-null="true" unique="true">
        <column name="type" />
    </property>
</class>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping 
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" 
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="com.data.Child" table="CHILD">
        <id name="childId">
            <column name="childId" default="1"></column>
            <generator class="increment"></generator>
        </id>

    <property name="parentId" column="parentId" />

    <property name="description" not-null="true">
        <column name="description" />
    </property>
</class>


您能否打开SQL日志以查看数据库中的内容?当存在
save(S实体)时,为什么要在存储库中定义
save(Contact)
方法
crudepository
?另外,从您的屏幕截图来看,
租户ID
似乎是您实际数据库中的外键,但没有映射到您的实体上?@pred-fragmaric我已经用SQL更新了我的问题logging@DonovanMuller我已删除save()方法。租户ID不是外键,因此在实体上没有这样的映射。无论如何,我已经运行了应用程序,但仍然遇到同样的问题。您是否有可能在GitHub等上安装一个小测试项目?同意
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping 
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" 
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="com.data.Parent" table="PARENT">
        <id name="parentId" type="long">
            <column name="parentId" default="1"></column>
            <generator class="increment"></generator>
        </id>

    <property name="userId" not-null="true">
        <column name="userId" />
    </property>
    <property name="type" not-null="true" unique="true">
        <column name="type" />
    </property>
</class>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping 
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" 
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="com.data.Child" table="CHILD">
        <id name="childId">
            <column name="childId" default="1"></column>
            <generator class="increment"></generator>
        </id>

    <property name="parentId" column="parentId" />

    <property name="description" not-null="true">
        <column name="description" />
    </property>
</class>