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 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)