我有一个简单的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
实例,f.I.:
public void changePlayerCharacterName(PlayerCharacter character, String name){
character.setCharacterName(name);
// How to correctly persist the 'character' instance here?
}
我可以只调用userRepository.save(character);
吗?
我是否需要自动连接另一个存储库(PlayerCharacterRepository
)并在其上调用.save()?
首先,您不会使用UserRepository,而是使用PlayerCharacterRepository。
但即便如此,JPA的基本原则是,它自动地使对托管实体所做的更改持久化。所以不需要调用save()。您只需获得一个托管播放器字符(使用find(),或通过在关联中导航,或通过使用查询),并更改其名称。这就是你所需要的。
我有一个名为的类,它有一个狗的列表: 狗类有一个小狗列表: 当我试图创建一个新的人类,它有一只狗,狗又有一只小狗,并且我使用带有spring的Hibernate JPA存储库来保存人类时: 我得到以下错误: 但是,如果我用默认值创建人类,并用人类存储库保存他,它就能工作,并且保存了小狗。 我不明白为什么小狗没有自动保存,我也不想使用一个单独的存储库来保存小狗。当狗定义时,Hibernate不应该自
我确实有两个实体,称为学校和水平,具有多对多的关系。 我的Rest controller有一个create方法,它接受一个SchoolDTO(目前它的结构与实体相同)。 当我试图通过JPARepository保存方法保存时,会抛出一个包含以下消息的异常: 通过遍历每个级别Id来解决这个问题...使用JPA存储库方法(它调用)获取引用,然后加载正确的模型,然后成功持久化。 我的问题是:这是在Spri
Hibernate 认为持久化类(persistent class)新实例化的对象是瞬时(Transient)的。我们可通过将瞬时(Transient)对象与 session 关联而把它变为持久的(Persistent)。 DomesticCat fritz = new DomesticCat(); fritz.setColor(Color.GINGER); fritz.setSex('M');
谢谢 ----更新----
Akka持久化使有状态的actor能留存其内部状态,以便在因JVM崩溃、监管者引起,或在集群中迁移导致的actor启动、重启时恢复它。Akka持久化背后的关键概念是持久化的只是一个actor的内部状态的的变化,而不是直接持久化其当前状态 (除了可选的快照)。这些更改永远只能被附加到存储,没什么是可变的,这使得高事务处理率和高效复制成为可能。有状态actor通过重放保存的变化来恢复,从而使它们可以重
我遇到了一个问题,在我的JPA表中没有任何内容被持久化。据我所知,我想我理解了的基本思想。我猜出现问题的原因是,我在一个可嵌入的对象中有一个。 一个简单的例子: 有什么线索表明可能出了什么问题吗? 为了简洁起见,我将尽量使附加信息尽可能简短。 创建计算原因 创建计算历史记录 调试信息在计算历史#创建 HibernateDAO仓库 Hibernate生成的SQL 看起来HiberNate甚至没有生成