尝试在@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)
答案 0 :(得分:0)
我想您应该以this为例。如果要将此处编写的内容应用于项目,则您的实体可能看起来像这样:
@Entity
public class TestEntity {
@Id
@GeneratedValue
private Long id;
@ManyToOne
private 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:
注意:这是单向的一对多关系。 (TestEntity引用了它的testAttr,但是TestAttr没有它的testEntities列表
您可以根据需要使用级联类型来管理回购方法的行为。
希望我有所帮助:)