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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大