Hibernate Java从持久化的超类中持久化子类实体

时间:2017-10-30 13:04:33

标签: java hibernate jpa

我有一个Agent类和一个扩展Agent的User类。 我想将一个持久化的代理程序转发给用户,并使用相同的id,name和firstname持久保存用户。我没有在Agent表中插入其他行的内容。我怎么能这样做?

这是我的课程。

@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();

总结一下,我想在需要时向用户授予代理。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我一直都是这样做的。它正在工作,但我失去了用户是专业代理的事实。

List<Integer> originalPlusOne = new ArrayList<>(new MappedList<>(original, i -> i+1));