java - Hibernate Java 持久化来自持久化父类(super class)的子类实体

标签 java hibernate jpa

我有一个代理类和一个扩展代理的用户类。 我想将持久代理强制转换为用户,并使用相同的 ID、名称和名字来持久保留该用户。我不知道如何将另一行插入代理表中。我怎样才能做到这一点?

这是我的类(class)。

@Entity
@Table(name = "agent")
@Inheritance(strategy = InheritanceType.JOINED)
public class Agent {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    protected Integer id;

    @Column(name = "fistname", nullable = false)
    protected String fistname;

    @Column(name = "name", nullable = false)
    protected String name;
}

@Entity
@Table(name="user")
public User extends Agent{
   @Column(name = "login", nullable = false, unique = true)
   public String login;
   @Column(name = "password", nullable = false)
   public String password;

我想这么做

Agent agent=agentService.findOne(1);
User user = new User(agent);
user.setLogin("login");
...
user=userService.saveAndFlush(user);
ok = user.getId() == agent.getId();

总而言之,我想在需要时向用户授予代理。

最佳答案

您无法将代理强制转换为用户,但可以通过在 User 属性中设置代理的属性来从代理构建用户,除非您在 User 类中从 Agent ->User 添加了复制构造函数,在这两种情况下,都会创建一个新用户并添加一个新行。

关于java - Hibernate Java 持久化来自持久化父类(super class)的子类实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47016009/

相关文章:

java - 没有很多类的 Spring Data (JPA) 多个存储库

Java 哈希表和 HashMap

java - 在新的浏览器选项卡中打开 ResponseEntity PDF

hibernate - 是否可以在 HQL 中覆盖 Hibernate 的 'like' 运算符?

java - JPA(Hibernate、EclipseLink)映射 : why doesn't this code work (chain of 2 relationships using JPA 2. 0,@EmbeddedId 复合 PK-FK)?

mysql - JPA/Hibernate 连接表/连接列 ID 未标记为外键?

java - 是否有正则表达式来获取所有引号?

java - Lucene 接近实时搜索

java - 按相关实体筛选 Hibernate 条件

java - 如何防止数据库中存储多个条目?