Нужно ли устанавливать родителя ребенка? - PullRequest
0 голосов
/ 24 мая 2018

У меня проблема с тем, что Домен (дочерний) не получает идентификатор Бизнеса (родительский).У меня есть созданный бизнес и домен, но у домена нет business_id.Ниже то, что я делал изначально.Затем я создал тестовый путь, который вызвал, который давал то же поведение, если только я не использовал метод setBusiness из domain.Это ожидание?Нужно ли зацикливаться на доменах, которые передаются от клиента, и устанавливать бизнес?

Тест

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
}

-

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

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

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

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "business_id", nullable = false)
    private Business business;
    //...getters and setters
}

Я звонил в службу отдыха, используя приведенный ниже JSON, который затем продолжил дело.

{
    "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();
    }
}
...