在数据库中存储我的类的集合

时间:2016-10-15 13:43:10

标签: java spring postgresql hibernate collections

我需要存储在我的类的数据库集合中,如下所示:

class City {
    private String name;
    private List<String> points;
}

所以我的表应该是这样的:

@Entity
class Cities {
    private Date date;
    private List<City> cities;
}

那么我如何在Spring Web应用程序中实现呢?

1 个答案:

答案 0 :(得分:0)

Spring使用hibernate来处理数据库数据操作。

如果您将eclipse用作IDE,那么您可以在JBoss Tools中安装Hibernate Tools插件。 Hibernate Tools可以将数据库模式反向工程为域模型(实体)类。

要安装它:

  1. 转到帮助&gt; Eclipse Marketplace ...并搜索JBoss Tools。在结果列表中,您应该看到&#34; JBoss Tools 4.4.1.Final&#34;,单击旁边的安装按钮。
  2. 之后,您需要选择要安装的功能。仅选择休眠工具,然后单击确认。
  3. 接受许可并单击“完成”。
  4. 重启eclipse
  5. 为了配置它:

    1. 在eclipse中打开Hibernate透视图
    2. 在Hibernate Configurations视图中,单击&#34; Add Configuration ...&#34;
    3. 选择注释(jdk 1.5 +)
    4. 对于Hibernate版本,我更喜欢最新版本:5.2
    5. 浏览您正在处理的项目
    6. 在Database connection部分中单击New ...,选择您正在使用的数据库类型,单击next,添加一个新驱动程序(您需要提供JDBC驱动程序的jar文件),然后输入您的数据库连接详细信息(数据库,URL,用户名,密码)。单击“测试连接”以检查配置是否成功。
    7. 在配置文件部分,点击&#34;设置&#34;,然后&#34;新建...&#34;。
    8. 选择项目的src文件夹。文件名应保留为hibernate.cfg.xml。点击下一步。
    9. 点击&#34;从连接&#34;获取值,然后选择您之前创建的连接配置文件。在数据库方言中,选择数据库的方言。单击完成。现在您已进行数据库配置设置。
    10. 为了使用它:

      1. 在菜单中,选择运行&gt; Hibernate代码生成...&gt; Hibernate代码生成配置......
      2. 创建新的启动配置。
      3. 在启动配置中,选择以前创建的控制台配置。
      4. 输出目录应该是项目的src文件夹。
      5. 单击“从JDBC连接反向工程”
      6. 输入要在其中生成实体类的包的名称。
      7. 在“导出器”选项卡中,选择“#34;使用Java 5语法&#34;和&#34;生成EJB3注释&#34;,并选择&#34;域代码(.java)&#34;在出口商部分
      8. 单击“运行”,然后检查填充实体类的包。
      9. 我尝试在本地数据库中重现您的架构并运行代码生成。

        这就是我最终的结果:

        <强> Point.java:

        @Entity
        @Table(name = "point", schema = "public")
        public class Point implements java.io.Serializable {
        
            private int id;
            private City city;
            private double latitude;
            private double longitude;
        
            public Point() {
            }
        
            public Point(int id, City city, double latitude, double longitude) {
                this.id = id;
                this.city = city;
                this.latitude = latitude;
                this.longitude = longitude;
            }
        
            @Id
        
            @Column(name = "id", unique = true, nullable = false)
            public int getId() {
                return this.id;
            }
        
            public void setId(int id) {
                this.id = id;
            }
        
            @ManyToOne(fetch = FetchType.LAZY)
            @JoinColumn(name = "city", nullable = false)
            public City getCity() {
                return this.city;
            }
        
            public void setCity(City city) {
                this.city = city;
            }
        
            @Column(name = "latitude", nullable = false, precision = 17, scale = 17)
            public double getLatitude() {
                return this.latitude;
            }
        
            public void setLatitude(double latitude) {
                this.latitude = latitude;
            }
        
            @Column(name = "longitude", nullable = false, precision = 17, scale = 17)
            public double getLongitude() {
                return this.longitude;
            }
        
            public void setLongitude(double longitude) {
                this.longitude = longitude;
            }
        
        }
        

        <强> City.java:

        @Entity
        @Table(name = "city", schema = "public")
        public class City implements java.io.Serializable {
        
            private String name;
            private Cities cities;
            private Set<Point> points = new HashSet<Point>(0);
        
            public City() {
            }
        
            public City(String name, Cities cities) {
                this.name = name;
                this.cities = cities;
            }
        
            public City(String name, Cities cities, Set<Point> points) {
                this.name = name;
                this.cities = cities;
                this.points = points;
            }
        
            @Id
        
            @Column(name = "name", unique = true, nullable = false)
            public String getName() {
                return this.name;
            }
        
            public void setName(String name) {
                this.name = name;
            }
        
            @ManyToOne(fetch = FetchType.LAZY)
            @JoinColumn(name = "cities", nullable = false)
            public Cities getCities() {
                return this.cities;
            }
        
            public void setCities(Cities cities) {
                this.cities = cities;
            }
        
            @OneToMany(fetch = FetchType.LAZY, mappedBy = "city")
            public Set<Point> getPoints() {
                return this.points;
            }
        
            public void setPoints(Set<Point> points) {
                this.points = points;
            }
        
        }
        

        <强> Cities.java:

        @Entity
        @Table(name = "cities", schema = "public")
        public class Cities implements java.io.Serializable {
        
            private int id;
            private Date date;
            private Set<City> cities = new HashSet<City>(0);
        
            public Cities() {
            }
        
            public Cities(int id, Date date) {
                this.id = id;
                this.date = date;
            }
        
            public Cities(int id, Date date, Set<City> cities) {
                this.id = id;
                this.date = date;
                this.cities = cities;
            }
        
            @Id
        
            @Column(name = "id", unique = true, nullable = false)
            public int getId() {
                return this.id;
            }
        
            public void setId(int id) {
                this.id = id;
            }
        
            @Temporal(TemporalType.DATE)
            @Column(name = "date", nullable = false, length = 13)
            public Date getDate() {
                return this.date;
            }
        
            public void setDate(Date date) {
                this.date = date;
            }
        
            @OneToMany(fetch = FetchType.LAZY, mappedBy = "cities")
            public Set<City> getCities() {
                return this.cities;
            }
        
            public void setCities(Set<City> cities) {
                this.cities = cities;
            }
        
        }
        

        This article should provide you further help.