Jpa 我需要设置孩子的家长吗?

Jpa 我需要设置孩子的家长吗?,jpa,jakarta-ee,eclipselink,Jpa,Jakarta Ee,Eclipselink,我遇到了一个问题,域(子域)没有获取业务(父域)id。我创建了业务并创建了域,但域没有业务id。下面是我最初的操作。然后我创建了一个我调用的测试路径,该路径给出了相同的行为,除非我使用了域的setBusiness方法。这是期望吗?我是否需要在从客户端传递的域上循环并设置业务 测试 public void test() { Business b = new Business(); b.setName("Test Test"); Domain d1 = new Domain(

我遇到了一个问题,域(子域)没有获取业务(父域)id。我创建了业务并创建了域,但域没有业务id。下面是我最初的操作。然后我创建了一个我调用的测试路径,该路径给出了相同的行为,除非我使用了
域的
setBusiness
方法。这是期望吗?我是否需要在从客户端传递的域上循环并设置业务

测试

public void test() {
    Business b = new Business();
    b.setName("Test Test");
    Domain d1 = new Domain();
    d1.setName("Domain 1");
    d1.setBusiness(b);
    em.persist(b);
    em.flush();
}
代码

@Entity
@Table(name = "Business")
public class Business {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

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


    @OneToMany(mappedBy="business", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Domain> domains = new ArrayList<>();
    //...getters and setters
}
我使用下面的JSON调用了一个rest服务,该服务将业务持久化

{
    "name": "Business Test ",
    "domains": [{"name": "test domain"}]
}


@Path("business")
public class BusinesResouce {

    @EJB
    BusinessService service;

    @Path("create")
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public void create(Business entity) {
        service.persist(entity);
    }
    //other paths
}
-


对必须设置“拥有”外键的关系的一侧。现实地说,你应该设置两边,使它们保持同步。@Chris哦,很好,配置不错。你能把这两种设置都展开吗?我认为这就是注释保持同步的关键所在。它们只是java对象,所以如果设置一边,就必须设置另一边。换句话说,如果一个关系为null,而另一个关系被设置,那么哪一个是正确的?mapped by声明“另一方”控制外键,以便使用所有者关系,并且必须至少将其设置为您在数据库中想要的关系,但是有很多帖子都是关于为什么要在对象上设置两边,以使它们与数据库中的内容保持同步。@Chris这只是说在persist方法中我应该执行
entity.setDomains(domains)
?我能挖出来。这是我用JPA从头开始的第一个项目。我已经习惯了这些东西。
{
    "name": "Business Test ",
    "domains": [{"name": "test domain"}]
}


@Path("business")
public class BusinesResouce {

    @EJB
    BusinessService service;

    @Path("create")
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public void create(Business entity) {
        service.persist(entity);
    }
    //other paths
}
@Stateless
public class BusinessService {
    private static final String PERSISTENCE_UNIT_NAME = "edc";
    @PersistenceContext(unitName = PERSISTENCE_UNIT_NAME)
    private EntityManager em;

    public void persist(Business entity) {
        em.persist(entity);
        //Do I really need to loop entity.getDomains and setBusiness?
        em.flush();
    }
}