Spring Data JPA模型的性能改进

时间:2014-09-03 16:25:46

标签: hibernate jpa relational-database entity-relationship spring-data-jpa

我使用Spring Data JPA和Hibernate来模拟以下场景:

  1. 用户有多个主题
  2. 主题有多个属性
  3. 用户可为每个主题
  4. 设置多个 CustomProperty

    代码可以是:

    @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;
    }
    

    我需要返回一个JSON,其中包含用户主题列表和属性。 自定义属性必须使用相同的密钥覆盖主题属性。

    例如,如果&#34; topic1&#34;具有属性&#34; keyA&#34;:&#34; valueA&#34;,&#34; keyB&#34;:&#34; valueB&#34;和&#34; keyC&#34;:&#34; valueC&#34;和用户&#34;约翰&#34;拥有自定义属性&#34; keyB&#34;:&#34; customValue&#34; for&#34; topic1&#34;结果应该是:

    [
        {
             "name": "topic1",
             "keyA": "valueA",
             "keyB": "customValue",
             "keyC": "valueC"
        }
    ]
    

    一切正常,问题是效果。我生成JSON的方式是:

    1. 获取用户主题列表(1次访问数据库)
    2. 获取永远主题的属性列表(n访问数据库) - n =主题数
    3. 获取每个主题的自定义属性列表(n访问数据库)
    4. 使用自定义属性覆盖主题属性
    5. 您认为有更好的方法吗?也许改变数据库设计?

      欢迎提出任何建议。

      谢谢。

1 个答案:

答案 0 :(得分:1)

您当前的工作流程对于关系数据库

是正确的

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

另外,有一篇有趣的文章可以阅读关于orm - solving orm complexity

的文章