x1128R 2017-01-15 07:05 采纳率: 0%
浏览 746

关于Hibernate有连接双向1-1关联映射

我用的是Hibernate5.2.6版本,是用注解实现的映射,三个类代码如下,运行后数据库能生成三张表,但表没有数据,而且控制台会报错,请问这种错误是版本的原因吗?

@Entity
@Table(name = "person")
public class Person
{
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String  name;

    @OneToOne(targetEntity = Address.class)
    @JoinTable(name = "person_addr", 
        joinColumns = @JoinColumn(name = "person_id", referencedColumnName = "id", unique = true),
        inverseJoinColumns = @JoinColumn(name = "address_id", referencedColumnName = "addr_id", unique = true))
    private Address address;

    public void setId(Integer id)               { this.id = id; } 
    public void setName(String name)            { this.name = name; } 
    public void setAddress(Address address)     { this.address = address; }

    public Integer getId()          { return id; } 
    public String getName()         { return name; } 
    public Address getAddress()     { return address; } 

}
 @Entity
@Table(name = "addr_inf")
public class Address
{
    @Id @Column(name = "addr_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String  addrDetail;

    @OneToOne(targetEntity = Person.class)
    @JoinTable(name = "person_addr", 
            joinColumns = @JoinColumn(name = "address_id", referencedColumnName = "addr_id", unique = true),
            inverseJoinColumns = @JoinColumn(name = "person_id", referencedColumnName = "id", unique = true))
    private Person person;

    public Address()                                { }
    public Address(String addrDetail)               { this.addrDetail = addrDetail; }

    public void setId(Integer id)                   { this.id = id; }  
    public void setAddrDetail(String addrDetail)    { this.addrDetail = addrDetail; } 
    public void setPerson(Person person)            { this.person = person; }

    public Integer getId()          { return id; }
    public String getAddrDetail()   { return addrDetail; }  
    public Person getPerson()       { return person; } 
}
 public class Test
{
    public static void main(String[] args) throws Exception
    {
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
        SessionFactory sf = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        Session session = sf.openSession();
        Transaction transaction = session.beginTransaction();

        Person p = new Person();
        p.setName("aaa");

        Address a = new Address("上海");
        p.setAddress(a);
        session.persist(a);
        session.save(p);

        transaction.commit();
        session.close();
        sf.close();
    }
}
  • 写回答

1条回答

  • threenewbee 2017-01-15 07:13
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 docker模式webrtc-streamer 无法播放公网rtsp
  • ¥15 学不会递归,理解不了汉诺塔参数变化
  • ¥15 基于图神经网络的COVID-19药物筛选研究
  • ¥30 软件自定义无线电该怎样使用
  • ¥15 R语言mediation包做中介分析,直接效应和间接效应都很小,为什么?
  • ¥15 Jenkins+k8s部署slave节点offline
  • ¥15 如何实现从tello无人机上获取实时传输的视频流,然后将获取的视频通过yolov5进行检测
  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题