@MapKeyColumn в спящем значении ошибки по умолчанию - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь реализовать приведенный ниже пример для @MapKeyColumn.Существует OnetoMany связь между Company и Persons.Однако я получаю следующую ошибку при попытке сохранить экземпляр Person, так как он является владельцем отношения:

Caused by: java.sql.SQLException: Field 'name_emp' doesn't have a default value
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:975)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1114)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1062)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1383)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1047)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208)
... 20 more

Entity Entity

 @Entity

public class Person {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    int id;

    String name;

    @ManyToOne(cascade=CascadeType.PERSIST)
//@JoinColumn(name="company_id")
    Company company;

    public Person()
    {}

    public Person(String name) {
        super();
        this.name = name;

    }

    public int getId() {
        return id;
    }


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


    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


    public Company getcompany() {
        return company;
    }


    public void setcompany(Company c) {
        this.company = c;
    }

}

Company Entity

 @Entity
public class Company {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    int id;

    String name;

    @OneToMany(cascade=CascadeType.PERSIST,mappedBy="company")
    @MapKeyColumn(name="name_emp")
    Map<String,Person> persons= new HashMap<>();

    public Company()
    {}


    public Company(String name) {
        super();
        this.name = name;
    }

    public Map<String,Person> getPersons() {
        return persons;
    }

    public void setPersons(Map<String,Person> persons) {
        this.persons = persons;
    }



    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

MainTest

    Person p1 = new Person("jack");
    Company c= new Company("ABCORP");
    p1.setcompany(c);
    session.persist(p1);

1 Ответ

0 голосов
/ 19 марта 2019

Проблема может возникнуть из-за того, что отношение не установлено в экземпляре компании.

Не могли бы вы попытаться добавить человека в корпоративный эфир, вызвав c.getPersons().add(p1.getName(), p1) или изменив метод setcompany(...) на

public void setcompany(Company c) {
    c.getPersons().add(this.getName(), this)
    this.company = c;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...