正如标题所说,我有两个实体类
实体-1
@Entity
@Table(name = "entity1", schema = "schema")
public class EntityOne {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "first_id_seq")
@SequenceGenerator(sequenceName = "[schema].[first_id_seq]", name = "first_id_seq", allocationSize = 1)
@Column(name = "id")
private Integer id;
private String name;
@OneToMany(mappedBy = "entityOne", cascade=CascadeType.ALL)
private List<EntityTwo> entityTwo;
}
实体-2
@Entity
@Table(name = "entity2", schema = "schema")
public class EntityTwo {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "second_id_seq")
@SequenceGenerator(sequenceName = "[schema].[second_id_seq]", name = "second_id_seq", allocationSize = 1)
@Column(name = "id")
private Integer id;
@Column(name = "vendor_id")
private Integer vendorId;
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "vendor_id", referencedColumnName = "id", nullable = false, insertable = false, updatable = false)
private EntityOne entityOne;
}
最后,当保存它时,我用这样的方法创建了DAO层
@Repository
public interface Repository extends JpaRepository<EntityOne, Integer> {
}
public class DAO {
@Autowired
private Repository repository;
//consider this method getting called from controller
public EnitityOne mapRequestToEntity(Request request) {
EntityOne entityOne = new EntityOne();
entityOne.setName(request.getName);
List<EntityTwo> entityTwo = new ArrayList<>();
// setting entityTwo values here from the request
entityOne.setEntityTwo(entityTwo);
entityOne = save(entityOne);
return entityOne;
}
public EntityOne save(EntityOne entityOne) {
repository.saveAndFlush(entityOne);
}
}
我正在从控制器中保存EnityOne,但在保存EnityOne时,其ID(PK)应Map到EnityTwo的vendor_id和保存,但这并未发生。它保存为NULL
(仅在POC时,db中接受null)
1条答案
按热度按时间xe55xuns1#
根据您的代码,您没有直接关联到具有一个字段(使用@OneToMany是不够的)的PaddyOne和PaddyTwo。尝试保存EntityOne,然后保存EntityTwo,并为其分配EntityOne字段。应该够了。