我有一个spring boot应用程序,它使用spring数据和hibernate来获取数据并将数据插入数据库。 我有一对多的表关系:
@Entity
@Data
@EqualsAndHashCode(of = { "id" })
@Table(name = "direction")
public class Direction {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;
@Column(name = "name")
private String name;
}
和
@Entity
@Table(name = "subdivision")
@Data
@EqualsAndHashCode()
public class Subdivision {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;
@Column(name = "name")
private String name;
@ManyToOne()
@JoinColumn(name = "direction_id", referencedColumnName = "id")
private Direction direction;
}
我有用于boilarplate代码生成的lombok插件。 我也有资源库
public interface SubdivisionRepository extends CrudRepository<Subdivision, Long> {
List<Subdivision> findAll();
List<Subdivision> findByDirection(Direction direction);
}
和服务
@Service
public class SubdivisionServiceImpl implements SubdivisionService {
@Autowired
private SubdivisionRepository subdivisionRepository;
@Override
public List<Subdivision> findAll() {
return subdivisionRepository.findAll();
}
@Override
public Subdivision findById(Long id) {
return subdivisionRepository.findById(id).get();
}
@Override
@Transactional
public void save(Subdivision subdivision) {
subdivisionRepository.save(subdivision);
}
@Override
public List<Subdivision> findByDirection(Direction direction) {
return subdivisionRepository.findByDirection(direction);
}
}
这就是全部。然后我尝试通过更改方向类型更新子方向,它显示hibernate异常:托管刷新期间出错[org.hibernate.HibernateException:com.entity.Direction实例的标识符从2更改为3]
我在stackoverflow上发现了同样的问题,但没有任何建议有帮助。 我试图更改获取类型和级联类型,但它没有帮助。
有没有人有解决方案?
P.S这里的代码我如何更新实体
public void updateSubdivision(Subdivision subdivision){
Direction d = directionService.findById(subdivision.getDirection().getId());
Subdivision s = new Subdivision();
s.setDirection(d);
s.setName(subdivision.getName());
s.setId(subdivision.getId());
subdivisionService.save(s);
}
它的控制器方法