0
デタッチされたエンティティでsave()を呼び出すと、1対多の関係の内容を置き換えたいだけですが、新しいオカレンスを追加し、古いオカレンスを削除しません(エンティティをデータベース)。デタッチされたエンティティを保存し、1対多のリレーションシップの内容を置き換えるにはどうすればいいですか?
エンティティをロード/アタッチせずに関係をクリアする設定はありますか?
私はspring-data-jpaを使用しています。ここで
は私のサービスです。
@Component
@Transactional
public class StuffService {
@Autowired
StuffDao stuffDao;
public void save(StuffDto stuffDto) {
// The converter maps the properties into the entity, id included
Stuff stuff= stuffConverter.dtoToBo(stuffDto);
stuffDao.save(stuff);
}
}
のDTO
public class StuffDto {
private Long id;
@NotNull(message = "products-empty")
@Valid
private List<ProductStuffDto> products;
}
public class ProductStuffDto {
Integer order;
String name;
}
エンティティ
@Entity
public class Stuff {
@Id
@GeneratedValue
private Long id;
@OneToMany(mappedBy = "stuff", cascade = CascadeType.ALL)
private List<ProductStuff> products;
}
@Entity
public class ProductStuff {
@Id
@GeneratedValue
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "stuff_id", nullable = false)
private Stuff stuff;
Integer order;
String name;
}
ダオ
public interface StuffDao extends JpaRepository<Stuff, Long> {}
ご協力いただきありがとうございます。
JPAプロバイダは、リストを取得せずにリストへの追加を検出できるように変更追跡をサポートしている可能性があります。あなたは何を使っていますか? – Chris
Chrisさん、JPAプロバイダはHibernateです。私はその方法で解決策を見つけました。私の答えを以下に見てください(そして私の質問を見てくれてありがとう) – Lilian