Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate Spring数据JPA模型的性能改进_Hibernate_Jpa_Relational Database_Entity Relationship_Spring Data Jpa - Fatal编程技术网

Hibernate Spring数据JPA模型的性能改进

Hibernate Spring数据JPA模型的性能改进,hibernate,jpa,relational-database,entity-relationship,spring-data-jpa,Hibernate,Jpa,Relational Database,Entity Relationship,Spring Data Jpa,我使用Spring数据JPA和Hibernate对以下场景进行建模: 用户有多个主题 主题具有多个属性 用户可以为每个主题拥有多个自定义属性 代码可以是: 一切正常,问题在于性能。我生成JSON的方式是: 获取用户的主题列表(1个DB访问权限) 获取每个主题的属性列表(n访问DB)-n=主题数 获取每个主题的自定义属性列表(n访问数据库) 用自定义属性覆盖主题属性 你认为有更好的方法吗?也许改变数据库的设计 欢迎提出任何建议 谢谢。您的当前工作流适用于关系数据库 如果您希望提高锁定和连接的性能

我使用Spring数据JPA和Hibernate对以下场景进行建模:

  • 用户有多个主题
  • 主题具有多个属性
  • 用户可以为每个主题拥有多个自定义属性
  • 代码可以是:

    一切正常,问题在于性能。我生成JSON的方式是:

  • 获取用户的主题列表(1个DB访问权限)
  • 获取每个主题的属性列表(n访问DB)-n=主题数
  • 获取每个主题的自定义属性列表(n访问数据库)
  • 用自定义属性覆盖主题属性
  • 你认为有更好的方法吗?也许改变数据库的设计

    欢迎提出任何建议


    谢谢。

    您的当前工作流适用于关系数据库

    如果您希望提高锁定和连接的性能,可以尝试一些图形数据库,如neo4j和


    此外,还有一篇关于orm的有趣文章-

    如果您提供的链接在某个时候无法访问,请在您的答案中添加一些重要的细节
    @Entity
    public class User {
        @Id
        public Long id;
        public String name;
        @OneToMany (mappedBy="user")
        public List<CustomProperty> customProperties;
    }
    
    @Entity
    public class Topic {
        @Id
        public Long id;
        public String name;
        @OneToMany (mappedBy="topic")
        public List<Property> properties;
    }
    
    @Entity
    public class Property {
        @Id
        public Long id;
        public String key;
        public String value;
        @ManyToOne
        public Topic topic;
    }
    
    @Entity
    public class CustomProperty {
        @Id
        public Long id;
        public String key;
        public String value;
        @ManyToOne
        public Topic topic;
        @ManyToOne
        public User user;
    }
    
    [
        {
             "name": "topic1",
             "keyA": "valueA",
             "keyB": "customValue",
             "keyC": "valueC"
        }
    ]