我有一个简单的JPA存储库,看起来像这样:
public interface UserRepository extends JpaRepository<User, String>
{
User findByName(String name);
}
还有两个具有一对一映射关系的类,就像这样:
@Entity
public class User
{
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
protected String uuid;
@Column(nullable = false, unique = true)
private String name;
@Column(nullable = false)
private String email;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "user")
private PlayerCharacter playerCharacter;
//...
}
.
@Entity
public class PlayerCharacter
{
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
protected String uuid;
@OneToOne(optional = true)
private User user;
@Column(nullable = false)
private String characterName;
//...
}
现在,我知道可以像这样轻松地编辑和持久化用户实例:
User user = userRepository.findByName("Alice");
PlayerCharacter character = user.getPlayerCharacter();
character.setCharacterName("ConanTheBarbarian");
userRepository.save(user);
但是在没有指向User
实例的指针的上下文中,我如何持久化一个PlayerCharacter
实例,例如:
public void changePlayerCharacterName(PlayerCharacter character, String name){
character.setCharacterName(name);
// How to correctly persist the 'character' instance here?
}
我是否可以只调用userRepository.save(character);
?
还是需要自动装配另一个仓库 (PlayerCharacterRepository
) 并调用.save()方法吗?
userRepository.save
是多余的。 - Jens Schauder