【问题标题】:SQL Warning Code: 1364, SQLState: HY000 Field 'district_code' doesn't have a default valueSQL 警告代码:1364,SQLState:HY000 字段 'district_code' 没有默认值
【发布时间】:2017-04-13 22:32:47
【问题描述】:

我有 Lawyer、Country、State、City 和 District 表,我在其中创建了一个名为 lawyer_cscd 的额外表,其中包含上述表名的外键关系。

实际上,Country State City 和 District 已经预先填充了数据,我所要做的就是从这些数据中获取数据并为此与律师相关联,为此我创建了一个名为 Lawyer_cscd 的额外表,该表将与所有五个表都有外键关系表,

当我尝试将数据插入律师表时出现错误

 Field 'district_code' doesn't have a default value

下面是我的课

 @Entity
@Table(name = "lawyer")
public class Lawyer {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "lawyer_batch_no")
    private int lawyerbatchNo;

    @Column(name = "first_name")
    @NotEmpty
    private String firstName;
    @Column(name = "last_name")
    private String lastName;
    @Column(name = "date_of_birth")
    private Date dateOfBirth;


    @ManyToMany(fetch = FetchType.LAZY, targetEntity = Universities.class, cascade = CascadeType.ALL)
    @JoinTable(name = "lawyer_universities", joinColumns = @JoinColumn(name = "lawyer_batch_no", nullable = true), inverseJoinColumns = @JoinColumn(name = "university_code", nullable = true))
    private List<Universities> universities = new ArrayList<Universities>();

    @OneToOne(targetEntity = LmsUser.class, cascade = CascadeType.ALL)
    @JoinColumn(name = "user_id")
    private LmsUser registered_User = new LmsUser();

    @ManyToOne(targetEntity = Country.class, cascade = { CascadeType.ALL })
    @JoinTable(name = "lawyer_cscd", joinColumns = {
            @JoinColumn(name = "lawyer_batch_no", referencedColumnName = "lawyer_batch_no") }, inverseJoinColumns = {
                    @JoinColumn(name = "country_code", referencedColumnName = "country_code") })
    private Country country;
    @ManyToOne(targetEntity = State.class, cascade = { CascadeType.ALL })
    @JoinTable(name = "lawyer_cscd", joinColumns = {
            @JoinColumn(name = "lawyer_batch_no", referencedColumnName = "lawyer_batch_no") }, inverseJoinColumns = {
                    @JoinColumn(name = "state_code", referencedColumnName = "state_code") })
    private State state;
    @ManyToOne(targetEntity = City.class, cascade = { CascadeType.ALL })
    @JoinTable(name = "lawyer_cscd", joinColumns = {
            @JoinColumn(name = "lawyer_batch_no", referencedColumnName = "lawyer_batch_no") }, inverseJoinColumns = {
                    @JoinColumn(name = "city_code", referencedColumnName = "city_code") })
    private City city;
    @ManyToOne(targetEntity = District.class, cascade = { CascadeType.ALL })
    @JoinTable(name = "lawyer_cscd", joinColumns = {
            @JoinColumn(name = "lawyer_batch_no", referencedColumnName = "lawyer_batch_no") }, inverseJoinColumns = {
                    @JoinColumn(name = "district_code", referencedColumnName = "district_code") })
    private District district;
setter getter....
}

区表

@Entity
@Table(name = "district")
public class District {
    @Id
    @Column(name = "district_code")
    protected String district_code;

    @Column(name = "abbreviation")
    protected String abbreviation;

    @Column(name = "name", nullable = false)
    protected String name;

    @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, targetEntity = City.class, optional = false)
    @JoinColumn(name = "city")
    protected City city;


    @OneToMany(targetEntity = Lawyer.class, cascade = { CascadeType.ALL }, orphanRemoval = true)
    @JoinTable(name = "lawyer_cscd", joinColumns = {
            @JoinColumn(name = "district_code", referencedColumnName = "district_code") }, inverseJoinColumns = {
                    @JoinColumn(name = "lawyer_batch_no", referencedColumnName = "lawyer_batch_no") })
    private Set<Lawyer> lawyers=new HashSet<Lawyer>();
}

国家和州也一样,我们有 pozo 类

测试类

class Testing {
public static void main(String args[]){
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("persistentContext.xml");

        RegistrationDao dao = (RegistrationDao) applicationContext.getBean("registrationDaoImpl");
        LmsUser lmsUser = new LmsUser();
        lmsUser.setUser_id(2323l);
        lmsUser.setEmail("hiran17@gmail.com");
        lmsUser.setLast_Login(new Date());
        lmsUser.setStatus(UserStatus.active);
        dao.saveUser(lmsUser);

        Lawyer lawyer = new Lawyer();
        lawyer.setFirstName("sofi");
        lawyer.setLastName("gupta");
        lawyer.setDateOfBirth(new Date());

        AreaOfPractise dowry = new AreaOfPractise();
        dowry.setActive(true);
        dowry.setPractiseName("Murder");
        AreaOfPractise murder = new AreaOfPractise();
        murder.setActive(false);
        murder.setPractiseName("murder");
        lawyer.getAreaOfPractises().add(dowry);
        lawyer.getAreaOfPractises().add(murder);

        Address address = new Address();
        address.setActive(true);
        address.setAddressLine1("khini naka phoota kuwan");
        address.setAddressLine2("Kanpur");
        address.setAddressLine3("Up");
        address.setCity("Uttar Pradesh");
        address.setPostalCode("210001");
        address.setLawyer(lawyer);

        Universities universities = new Universities();
        // universities.setUniversity_code("1213");
        universities.setUniversityName("Uttar Pradesh Technical University");
        universities.setUniversityAddress(address);
        College colleges = new College();
        colleges.setCollege_code("DSI");
        colleges.setCollegeName("DSiTM");
        colleges.setCollegeType(CollegeType.LAW);
        colleges.setCollegeAddress(address);
        colleges.setUniversities(universities);
        universities.getColleges().add(colleges);
        universities.getLawyer().add(lawyer);
        lawyer.setRegistered_User(lmsUser);
        lawyer.getUniversities().add(universities);

        ExperienceSummary experienceSummary = new ExperienceSummary();
        experienceSummary.setLawyer(lawyer);
        experienceSummary.setNoOfCaseInProgress(45);
        lawyer.setExperienceSummary(experienceSummary);

        /*LawyerDao lawyerdao = (LawyerDao) applicationContext.getBean("lawyerDaoImpl");
        lawyerdao.saveLayer(lawyer);
        for (Lawyer string1 : lawyerdao.getLawyersByName("ankur", "jadiya")) {
            System.out.println(string1.getLawyerbatchNo());
            string1.getUniversities().size();
            for (Universities string : string1.getUniversities()) {
                System.out.println(string.getUniversityName());
            }
        }
*/
        CommonDao commonDao = (CommonDao) applicationContext.getBean("commonDaoImpl");

        Country country = new Country();
        country.setCountry_code("IND");
        country.setAbbreviation("IND");
        country.setName("India");
        State state = new State();
        state.setState_code("UP");
        state.setAbbreviation("UP");
        state.setName("Uttar Pradesh");
        state.setCountry(country);
        City city = new City();
        city.setCity_code("BNDA");
        city.setCityName("Banda");


        District district = new District();
        district.setDistrict_code("MUA");
        district.setName("MAHUA");
        district.setCity(city);
        city.getDistricts().add(district);
        District district1 = new District();
        district1.setDistrict_code("MAHOBA");
        district1.setName("MAHOBA");
        district1.setCity(city);
        city.setState(state);
        city.getDistricts().add(district1);
        state.getCity().add(city);
        City city1 = new City();
        city1.setCity_code("CNB");
        city1.setCityName("Kanpur");
        city1.setState(state);
        state.getCity().add(city1);
        City city2 = new City();
        city2.setCity_code("LKO");
        city2.setCityName("Lucknow");
        city2.setState(state);
        state.getCity().add(city2);

        country.getState().add(state);
        district.getLawyers().add(lawyer);
        city.getLawyers().add(lawyer);
        state.getLawyers().add(lawyer);
        country.getLawyers().add(lawyer);
        lawyer.setCountry(country);
        lawyer.setState(state);
        lawyer.setCity(city);
        lawyer.setDistrict(district);

        commonDao.saveCountry(country);

        LawyerDao clawDao = (LawyerDaoImpl) applicationContext.getBean("lawyerDaoImpl");
        clawDao.saveLayer(lawyer);

}

}

【问题讨论】:

  • 您正在尝试插入一个 'district_code' 值 null,但您已声明此列不为 null,或者您有约束要求此值不为 null
  • @scaisEdge 如果你看到这一行律师.setDistrict(district);我在律师 pozo 和 District.getLawyers().add(lawyer) 中设置区的值;两种方式我都提供了值,但是在保存 clawDao.saveLayer(lawyer) 的同时仍然抛出错误,不确定为什么它取 null
  • @scaisEdge 我从过去 4 天开始尝试这个,但无法理解我犯了什么错误
  • 我已经发布了一个希望是您正在寻找的东西

标签: java mysql hibernate hibernate-mapping


【解决方案1】:

您正在尝试插入 'district_code' 值 null 但您已声明此列不为 null 或者您有约束要求此值不为 null

在你保存区

 lawyer.setDistrict(district);

之后

 clawDao.saveLayer(lawyer);

但你设置的是 distric1 而不是区

    District district1 = new District();
    district1.setDistrict_code("MAHOBA");
    district1.setName("MAHOBA");
    district1.setCity(city);

【讨论】:

  • 我已经完全删除了 District1 对象本身,只提供了 District1 但仍然出现错误
  • 你现在是否正确设置了地区......(在之前的代码中......你可以尝试将 distrci1 分配给律师.setDistrict(district1);
  • 是的,我已经完全删除了 District1 本身,并且只使用了地区参考变量 Lawyer.setDistrict(district) 和 District.getLawyers().add(lawyer);
  • 仅供参考创建表律师_cscd(city_code varchar(255),country_code varchar(255),district_code varchar(255),state_code varchar(255),lawyer_batch_no整数不为空,主键(district_code,lawyer_batch_no))为什么 District_code 在创建表时成为这里的主键但是城市国家国家也都具有与地区相同的配置
  • 然后在你的表定义中尝试为区代码添加一个默认值 ..(也是一个空的 varchar ..)似乎 som 内部触发器检查这个..并且失败..
猜你喜欢
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 2013-03-04
  • 2019-11-23
  • 2013-09-16
相关资源
最近更新 更多