簡體   English   中英

Hibernate Java 從持久化的超類中持久化一個子類實體

[英]Hibernate Java persist a subclass entity from persisted superclass

我有一個代理類和一個擴展代理的用戶類。 我想將持久代理轉換為用戶並使用相同的 id、名稱和名字持久化用戶。 我不知道在代理表中插入另一行。 我怎樣才能做到這一點 ?

這是我的課。

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

總而言之,我想在需要時將代理授予用戶。

您不能將 Agent 轉換為 User,但您可以通過在 User 屬性中設置 Agent 的屬性來從 Agent 構建用戶,除非您在 User 類中添加了來自 Agent ->User 的復制構造函數,在這兩種情況下將創建一個新用戶並添加一個新行。

我一直在努力做到這一點。 它正在工作,但我失去了用戶是專業代理的事實。

@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 {
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   protected Integer id;
   @OneToOne
   @JoinColumn(name = "id_agent",nullable = false)
   protected Agent agent;
   @Column(name = "login", nullable = false, unique = true)
   private String login;
   @Column(name = "password", nullable = false)
   private String password;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM