我使用的是Spring数据jpa。将子实体添加到父实体后,我将父实体保存到数据库。我想得到孩子的身份证,但我发现我得到的是空的。
我在getId()方法中添加了@GeneratedValue(Strategy=GenerationType.IDENTITY),但它不起作用。
以下是模型:
@Entity
public class Parent {
private Integer id;
private List<Child> childList;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "parent_id")
public List<Child> getChildList() {
return childList;
}
// setters.....
}
@Entity
public class Child {
private Integer id;
private String name;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
@Cloumn("name")
public String getName() {
return name;
}
}
父实体已经在数据库中,所以我直接找到它,父存储库entends Jpa列举
这里是我的测试代码:
Parent parent = parentRepository.findById(1);
Child child = new Child();
child.setName("child");
parent.getChildList().add(child);
parentRepository.save(parent);
System.out.println("child's id: " + child.getId());
我得到的输出是:
child's id: null
子代已保存到数据库中,并且有id,但内存中实体的id仍然为空,如何在保存父代后获取子代的id?因为我创建的子对象被其他对象引用,所以我需要获取这个子对象的id,而不是从数据库中找到一个新对象。
根据代码,您已经创建了child
Object,并且没有为其元素设置任何值,然后尝试从新创建的对象(child.getId()
)中获取元素。
Parent parent = parentRepository.findById(1);
Child child = new Child(); // Empty child object created
parent.getChildList().add(child);
parentRepository.save(parent);
System.out.println("child's id: " + child.getId()); //Referring empty child object
这里您可以做的是:
在第五行,我们为其分配了dB值
Parent parent = parentRepository.findById(1);
Child child = new Child(); // Empty child object created
parent.getChildList().add(child);
parent = parentRepository.save(parent);
child = parent.getChildList().get(0);// assing db value to it( assingning 1st value of `ChildList`)
System.out.println("child's id: " + child.getId()); //now Referring non-empty child object
您必须使用保存方法中的返回值:
Parent parent = parentRepository.findById(1);
Child child = new Child();
parent.getChildList().add(child);
parent = parentRepository.save(parent); <---------- use returned value with ids set
System.out.println("child's id: " + parent.getChildList().get(0).getId()); <-- access saved child through parent list
我正在尝试开发一个小型电子商务项目。我有一个篮子和篮子项目实体。我只是想当我为客户保存购物篮时,我想把购物篮项目保存在数据库中。我认为我不应该为篮子项目创建存储库。我应该能够保存篮子项目,同时使用篮子存储库保存篮子。 在这里,我试图通过篮子服务获得一个篮子项目,并将其设置为篮子实体并保存它。 我有什么问题?我有个例外。
Javers v5.6.3 我有一个父实体,其中包含一系列子实体。当我区分两个父母列表,发现一个孩子有变化时,我需要知道哪个父母包含变化的孩子。 我的实体: 我想要区分的是: 为了简洁起见,切换到Groovy: 我是如何区分的: 输出: 我的问题是: 如何发现哪个父级包含子级/c1? 除了我有一个老板集合之外,这类似于应该检测薪酬变化()示例。使用该示例,给定具有不同下属的老板列表,如何找出的老板
我将JPA2与Hibernate一起使用。有两个实体类,和。最后一个是第一个的继承实体。使用SINGLE_TABLE继承策略。当我尝试通过从id=“123456”的CardElement中查询
我正在从经典Spring 4.3.2 Hibernate(HQL)迁移到Spring Boot 1.4.1 Hibernate(JPA)HikariCP连接池,并且在批量插入方面遇到问题。我需要保存1000到527 000个元素的大列表。 当我只保存一个实体的批次,没有任何依赖项(例如:类的5000个元素)时,一切都很好。 但是,如果我尝试同时保存子实体和父实体(只需为其设置),我会得到例外: 但
我有一些关于“级联”的问题,在我的项目中,我有类别类,每个类可以是父类或子类。但我在同一个类中定义了哪一个是父母还是孩子。父母和孩子之间存在一对多的关系。这是我的实体类 我的问题是;当我删除子类别时,它的成功并没有问题。如果父类别有子类别,则无法删除父类别。 错误消息; Servlet.service()的servlet[调度Servlet]在上下文中与路径[]抛出异常[请求处理失败;嵌套异常or
我对Spring和JPA等比较陌生。我试图在标签和客户之间建立一种多对多的关系(双向) 我想我的关系是对的。除了一个问题外,一切都很好。标记值保存到数据库后为“Null”。 因此,我要做的是——向客户添加一个新的标签列表,然后在保存客户时使用级联选项来保存它。在调用CustomerRepository之前,我设置了一个调试点。保存(customer),标记都有值。在保存操作(在客户存储库上)后,我