gpt4 book ai didi

java - 如何将两个相关对象以一对一关系保存到数据库中

转载 作者:行者123 更新时间:2023-12-02 03:39:13 27 4
gpt4 key购买 nike

当我尝试保存 U 对象时,出现下一个异常:

org.springframework.orm.jpa.JpaSystemException:尝试从 null 一对一属性 [com.roc.domain.A.user] 分配 id;嵌套异常是 org.hibernate.id.IdentifierGenerationException:尝试从 null 一对一属性 [com.roc.domain.A.user] 分配 id

我有两个表: 1.用户列是id(auto incr,primary),name。 2.联系列是id,user_id(即外键-> user.id)和地址。

@Entity
@Table(name = "a")
public class A {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;

@Column(name="address")
private String address;

@OneToOne
@MapsId
private U user;

public A() {

}
// getters and setters



}


@Entity
@Table(name = "u")
public class U {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name="username")
private String userName;
@JoinColumn(name = "user_id", referencedColumnName = "id")
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
private A a;

public U(){};

}

@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTest {

@Autowired
private URepository uRepository;

@Test
public void simpleCrudTest() {
U user = new U("name", new A("address"));
uRepository.save(user);


}
}

最佳答案

您已正确设置级联,但由于关系是双向的,您需要在内存模型中设置两侧。

  @Test
public void simpleCrudTest() {
U user = new U("name", new A("address"));

//will work when this is added
a.setUser(user);
uRepository.save(user);

}

否则,如错误所述,A 在保存时对用户的引用为空。

关于java - 如何将两个相关对象以一对一关系保存到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56845677/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com