尝试在@ManyToOneTestEntity之间的单独表中创建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)

最佳答案

我认为您应该在this示例中喜欢。如果要将此处编写的内容应用于项目,则您的实体可能如下所示:



 测试实体

@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的ID:

java - @ManyToOne与联接表的关系(可空=假)-LMLPHP

注意这是单向OneToMany关系。 (TestEntity引用了它的testAttr,但是TestAttr没有它的testEntities列表。
您可以根据需要使用级联类型来管理回购方法的行为。
希望我能帮到:)

关于java - @ManyToOne与联接表的关系(可空=假),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52167712/

10-12 05:50