Я пытаюсь сохранить данные, используя JpaRepository , предоставляя данные дочерней сущности вместе с данными родительской сущности, но операция сохранения выполняется только для родительской сущности, но не для дочерних сущностей.Ниже моя реализация:
Моя дочерняя сущность:
@Entity
@Table(name = "justchild", schema = "test")
public class JustChildEntity implements Serializable {
private static final long serialVersionUID = 8495817802073010928L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private long id;
@Basic
@Column(name = "cname", nullable = true)
private String cname;
@ManyToOne
@JoinColumn(name = "fk_id", referencedColumnName = "id")
private JustParentEntity justParentEntity;
// getters and setters
}
Моя родительская сущность:
@Entity
@Table(name = "justparent", schema = "test")
public class JustParentEntity implements Serializable {
private static final long serialVersionUID = -748956247024967638L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private long id;
@Basic
@Column(name = "name", nullable = true)
private String name;
@OneToMany(mappedBy = "justParentEntity", targetEntity = JustChildEntity.class)
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
private Set<JustChildEntity> justChildEntities;
// getters and setters
}
Моя реализация через контроллер:
@Autowired
private JustParentRepo justParentRepo;
@GetMapping("/test-persist-many")
@ResponseBody
public void testPersistMany() {
JustParentEntity justParentEntity = new JustParentEntity();
justParentEntity.setName("parent 1");
JustChildEntity justChildEntity = new JustChildEntity();
justChildEntity.setCname("child Name 1");
justChildEntity.setJustParentEntity(justParentEntity);
JustChildEntity justChildEntity2 = new JustChildEntity();
justChildEntity2.setCname("child Name 2");
justChildEntity.setJustParentEntity(justParentEntity);
Set<JustChildEntity> justChildEntities = new HashSet<>();
justChildEntities.add(justChildEntity);
justChildEntities.add(justChildEntity2);
justParentEntity.setJustChildEntities(justChildEntities);
justParentRepo.save(justParentEntity);
ObjectMapper objectMapper = new ObjectMapper();
try {
String json = objectMapper.writeValueAsString(justParentEntity);
System.out.println(json);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
Интерфейс моего репозитория:
@Repository
@Transactional
public interface JustParentRepo extends JpaRepository<JustParentEntity, Long> {
}
Вывод My Seriallized json выглядит следующим образом:
{
"id": 8,
"name": "parent 1",
"justChildEntities": [{
"id": 0,
"cname": "child Name 1",
"justParentEntity": null
}, {
"id": 0,
"cname": "child Name 2",
"justParentEntity": null
}]
}
Здесь я вижу дочерние объекты, не имеющие значения идентификатора и не назначенные внешним ключам.Я использую Spring Boot 1.5.13.Пожалуйста, помогите.
ОБНОВЛЕНИЕ
я добавил justParentRepo.flush()
после сохранения, но он не работает.
Мой файл application.properties:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&autoReconnect=true
spring.datasource.username=root
spring.datasource.password=12345
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.max-idle=20
spring.datasource.tomcat.min-idle=15
spring.datasource.tomcat.test-while-idle=true
spring.datasource.tomcat.test-on-borrow=true
spring.datasource.tomcat.time-between-eviction-runs-millis=3600000
spring.datasource.tomcat.validation-query=SELECT 1
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.properties.hibernate.id.new_generator_mappings=true
spring.jpa.properties.hibernate.format_sql=true