Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate:insertable=false&;的有趣测验;可更新=错误_Java_Hibernate_Hibernate Mapping - Fatal编程技术网

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)。请关闭此问题您可以自己关闭此问题,单击“关闭”按钮我已经投票关闭此问题。但据我所知,这需要五票。奇怪的是,我通常可以删除我自己的帖子