Java Hibernate:insertable=false&;的有趣测验;可更新=错误
我所拥有的: 多个Java Hibernate:insertable=false&;的有趣测验;可更新=错误,java,hibernate,hibernate-mapping,Java,Hibernate,Hibernate Mapping,我所拥有的: 多个所有者实体,其中包含一个客户子类型实体。我需要每个客户端实体的子类型只能保存到数据库中一次,所以我使用insertable=false,updateable=false @Entity @Table(name = "Client") public class Client implements Serializable { @Id @Column(name = "id") private String id = this.getClass().getS
所有者
实体,其中包含一个客户
子类型实体。我需要每个客户端实体的子类型只能保存到数据库中一次,所以我使用insertable=false,updateable=false
@Entity
@Table(name = "Client")
public class Client implements Serializable {
@Id
@Column(name = "id")
private String id = this.getClass().getSimpleName();
@Column(name = "firstName")
private String firstName;
//getters & setters
}
@Entity
@Table(name = "Client")
public class AngryClient extends Client {
}
@Entity
@Table(name = "Client")
public class SilentClient extends Client {
}
@Entity
@Table(name = "Owner")
public class Owner {
@Id
@SequenceGenerator(name = "sequence", sequenceName = "_vacancy")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequence")
@Column(name = "id")
private int id;
@ManyToOne
@JoinColumn(name = "id", insertable = false, updatable = false)
//getters & setters
}
我抓不住的东西:
由于insertable=false,updateable=false
,当我们保存所有者时,客户端将不会被保存。它可以很容易地在数据库中进行检查。owner
表中存储的唯一列是id
那么Hibernate如何知道哪个客户端
对应于哪个所有者
强>
Session session = sessionFactory.openSession();
session.beginTransaction();
Owner owner1 = new Owner();
Owner owner2 = new Owner();
Client client1 = new AngryClient();
Client client2 = new SilentClient();
owner1.setClient(client1);
owner2.setClient(client2);
session.save(owner1); //client1 isn't saved
session.save(owner2); //client2 isn't saved
int owner1Id = owner1.getId();
session.getTransaction().commit(); //client table is empty
Session session1 = sessionFactory.openSession();
Owner owner = (Owner) session1.get(Owner.class, owner1Id);
System.out.println(owner.getClient()); //HOW DOES IT WORK?! (owner.getClient() returns me AngryClient)
问题:
它是如何工作的?或者当我们执行
session.get(Owner.class,owner1Id)
时,Hibernate如何填充客户端文件?对不起,在session1.get(Owner.class,owner1Id)
中出错(我使用了session而不是session1)。请关闭此问题您可以自己关闭此问题,单击“关闭”按钮我已经投票关闭此问题。但据我所知,这需要五票。奇怪的是,我通常可以删除我自己的帖子