私が次のビジネスモデルを持っていたとしましょう:
ユーザーは最大n台の車両を所有しています。
これは、ユーザー向けの私のDAO /ドメインクラスです。
@Entity
@Table(name="USER")
public @Data class User extends AbstractPersistable<Long> {
@OneToMany(cascade=CascadeType.PERSIST, mappedBy="owner")
private Set<Vehicle> vehicles = new HashSet<Vehicle>();
}
そしてこれは車両のクラスです:
@Entity
@Table(name="VEHICLE")
public @Data class Vehicle extends AbstractPersistable<Long> {
@ManyToOne(optional = false)
@JoinColumn(name = "user_id")
User owner;
}
次のように、新しいユーザーのために新しい車両を保存できるようにしたいと思います。
User user = new User();
user.setName("Fred"); // other setters omitted
Vehicle vehicle = new Vehicle();
vehicle.setEngine("..."); // other setters omitted
user.getVehicles().add(vehicle);
userService.saveUser(user);
userService.saveUser()は、@ Transactionalとして注釈が付けられ、 userRepository.save(user);を呼び出すサービスレイヤーメソッドです。(リポジトリクラスからの抜粋については、下部を参照してください)
私のソリューションが期待どおりに機能していないため、いくつか質問があります。
1.ユーザーオブジェクトを保存して、ユーザーオブジェクト内のVehicle-Setを自動的に永続化することも可能ですか?
2.これはベストプラクティスですか?私はユーザーが所有者であることを知っています。ユーザーが削除されたときに、ユーザーのすべての車両を削除したい。
3.または、常にvehicle.setOwner(user);のようなことをする必要がありますか。?
4.あなたの観点から、これに対する最適な解決策は何ですか?
エンティティとJoinColumn/mappedByの所有についてたくさん読みました。しかし今、私は以前よりも混乱しています。
さらに、それは私のUserRepositoryからの抜粋です。
import org.springframework.data.jpa.repository.JpaRepository;
import org.myproject.domains.User;
public interface UserRepository extends JpaRepository<User, Long> {
User findByLoginName(String loginName);
}