尝试在@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)
最佳答案
我认为您应该在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:
注意这是单向OneToMany关系。 (TestEntity引用了它的testAttr,但是TestAttr没有它的testEntities列表。
您可以根据需要使用级联类型来管理回购方法的行为。
希望我能帮到:)
关于java - @ManyToOne与联接表的关系(可空=假),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52167712/