@ManyToOne Связь с таблицей соединений (nullable = false) - PullRequest
0 голосов
/ 04 сентября 2018

Попытка создать отношение @ManyToOne в отдельной таблице между TestEntity и TestAttr, получая ответ об ошибке:

org.hibernate.PropertyValueException: not-null property references a null or transient value : com.test.TestEntity.testAttr; nested exception is javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value : com.test.TestEntity.testAttr

вот сущность, которая имеет проблему:

@Table(name = "test_table")
public class TestEntity{

  @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
  @JoinTable(name = "test_attr_test_entity", joinColumns = {@JoinColumn(name = "test_entity_id", nullable = false, updatable = false)},
      inverseJoinColumns = {@JoinColumn(name = "test_attr_id", nullable = false, updatable = false)})
  private TestAttr testAttr;
  .
  .
  .
 }

А при изменении на @ManyToMany работает без ошибок.

Персистентный код:

testEntityRepository.save(testEntity)

1 Ответ

0 голосов
/ 04 сентября 2018

Я думаю, что вам нужно на этом примере. Если вы хотите применить то, что там написано, к вашему проекту, ваши сущности могут выглядеть так:


TestEntity

@Entity
public class TestEntity {

    @Id
    @GeneratedValue
    private Long id;

    @ManyToOne
    private TestAttr testAttr;
...

TestAttr

@Entity
public class TestAttr {

    @Id
    @GeneratedValue
    private Long id;
...

Пример сохранения с использованием репозиториев Spring Data:

TestAttr attr = new TestAttr();

testAttrRepository.save(attr);

TestEntity entity1 = new TestEntity();
TestEntity entity2 = new TestEntity();

entity1.setTestAttr(attr);
entity2.setTestAttr(attr);

testEntityRepository.save(entity1);
testEntityRepository.save(entity2);

Таблицы

Как видите, TestEntity имеет идентификатор своего testAttr в базе данных:

tables in database

Примечание Это односторонний корабль OneToMany. (TestEntity имеет ссылку на свой testAttr, но TestAttr не имеет списка своих testEntities

Поведение методов репо вы можете модерировать каскадными типами по своему усмотрению. Надеюсь, я помог:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...