hibernet在网络上的一对多

时间:2017-04-11 07:44:30

标签: java hibernate

我在Hibernate ORM世界中是全新的,最近阅读映射特别是一对多的关系。但我面临一些问题需要理解。

我正在使用此链接来了解hibernate关系。 https://dzone.com/tutorials/java/hibernate/hibernate-example/hibernate-mapping-one-to-many-using-annotations-1.html

请看一下代码。

public class Student {

  private long studentId;

 private String studentName;

 private Set<Phone> studentPhoneNumbers


//setter getter
}

public class Phone {

    private long phoneId;
    private String phoneType;
    private String phoneNumber;

//setter getter

}
我明白了。

混乱就在这里。

Set<Phone> phoneNumbers = new HashSet<Phone>(); 

phoneNumbers.add(new Phone("house","32354353"));

phoneNumbers.add(new Phone("mobile","9889343423")); 

Student student = new Student("Eswar", phoneNumbers); 

session.save(student);
  1. 这只是一个代码session.save(student),在两个表中存储值吗?如果没有那么为什么我们没有编写代码来保存phoneNave(phoneNumbers)这样的phoneNumbers。

  2. 执行上面的代码后,该值将存储在表格或对象(STUDENT和PHONE)中吗?我想每次执行这段代码时,这个代码都会在两个表中插入值。我不喜欢它。我想要的价值应该只存储在第二张桌子上(PHONE)。

  3. 那么我将如何仅在PHONE对象中存储价值? 或者我们将如何实现这种关系,用户将通过组合框选择STUDENT并通过简单的文本框填充PHONE对象中的值。然后最后保存它。像产品/类别。

    3.请帮助或建议一些在Web应用程序中实现hibernate(特别是一对多和多对多关系)的好教程。我见过很多教程,但所有这些都是通过main方法实现的。

    抱歉英语不好 感谢。

1 个答案:

答案 0 :(得分:0)

  1. 是的,它应该将学生和电话号码保存在自己的表格中。如果你注对正确的方式。学生应该是这样的:

    @Entity
        @Table(name = "student")
    
        public class Student {
        @id
    
        @GeneratedValue
        private long studentId;
    
        @column(name = "studentName")
        private String studentName;
    
        @OneToMany
        private Set<Phone> studentPhoneNumbers
    
        //setter getter
    }
    
    public class Phone {
    
    private long phoneId;
    private String phoneType;
    private String phoneNumber;
    
    //setter getter
    
    }
    

    然后还有一些配置要做。我建议你阅读本教程:https://www.tutorialspoint.com/hibernate/index.htm

  2. 对于您的代码,它并不多。但是如果你以正确的方式配置hibernate,你可以决定保存一个值的表/列

  3. Hibernate tutorial - Tutorials point