【问题标题】:Hibernate mapping - map through tableHibernate 映射 - 通过表映射
【发布时间】:2011-07-26 00:30:13
【问题描述】:

我有以下数据库结构:

Table 1                    Table 2 
                                                       Table 3
tid_1 ----(many-to-one)---- tid_1                        
....                        tid_2 ----(one-to-many)---- tid_2
                                                        tkey
                                                        tvalue

有没有办法创建一个类,由Table 1 定义,与java.util.Map,关联tkeytvalue 来自Table 3?我对 Hibernate 还很陌生,在询问之前,我尝试过搜索和实验,但一无所获。任何帮助将不胜感激。

附: 如果这不会妨碍您,我更喜欢使用.hbm.xml 样式。

【问题讨论】:

    标签: java hibernate map many-to-many


    【解决方案1】:

    您可以声明一个以tkey 为键的映射和一个映射到Table 3 的实体作为值:

    @Entity
    public class Table1 {
        @ManyToMany
        @JoinTable(name = "Table2")
        @MapKey(name = "key")
        private Map<String, Table3> table3s;
    
        ...
    }
    
    @Entity
    public class Table3 {
        @Column(name = "tkey")
        private String key;
    
        @Column(name = "tvalue")
        private String value;
    
        ...
    }
    

    【讨论】:

    • 感谢您的回复。但是,如果我做对了,这样使用地图的好处就会失去 - 值将无法通过键访问
    • @Frozen:你总是可以做到table3s.get(key).getValue()
    • 您还可以在 Table1 上编写一个 getter,它返回一个包含 table3s 属性的映射并给出Map&lt;String, String&gt; 的错觉。它需要大量的样板,但并不难做到。您可以使用GuavaMaps.transformValues 使其更简单一些(但可能是只读的)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    相关资源
    最近更新 更多