我有一个简单的JPA存储库,看起来像这样:春天JPA - 坚持嵌套对象
public interface UserRepository extends JpaRepository<User, String>
{
User findByName(String name);
}
和两个类,有一个OneToOne映射,像这样:
@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);
但我怎么会从上下文中坚持一个PlayerCharacter
实例,其中我没有指针回到User
情况下,网络连接:
public void changePlayerCharacterName(PlayerCharacter character, String name){
character.setCharacterName(name);
// How to correctly persist the 'character' instance here?
}
可我只是叫userRepository.save(character);
?
是否需要自动调用另一个存储库(PlayerCharacterRepository
)并调用.save()?
为什么你会建议海报在不是JPA的一部分时使用一些专有注释'@ LazyCollection'? –
通过这个你可以有双向映射。 – Deepanjan