У меня проблема с тем, что Домен (дочерний) не получает идентификатор Бизнеса (родительский).У меня есть созданный бизнес и домен, но у домена нет 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();
}
}