【问题标题】:Questions in one-to-many hibernate mapping一对多休眠映射中的问题
【发布时间】:2012-07-22 06:45:10
【问题描述】:

我检查了许多在 stackoverflow 上打开的主题,但我并没有真正得到我的问题的答案。好的,让我们使用 ArrayList 来考虑这个示例:

public class Stock implements java.io.Serializable {     
    private Integer stockId;
    private String stockCode;
    private String stockName;
    private ArrayList<StockDailyRecord> stockDailyRecords = new ArrayList<StockDailyRecord>(); 
    //getter, setter and constructor
}
public class StockDailyRecord implements java.io.Serializable { 
    private Integer recordId;
    private Stock stock;
    private Float priceOpen;
    private Float priceClose;
    private Float priceChange;
    private Long volume;
    private Date date;

    //getter, setter and constructor
}

所以我们可以说从 Stock 到 StockDailyRecord 的关联一对多。这就是我试图在 Stock.hbm.xml 中映射的内容。我读到,在通过 list 标记进行映射时,我们需要一个 index

所以我的第一个问题是:是否可以将 索引列表 保持为空?

<list name="stockDailyRecords" table="stock_daily_record" inverse="true" lazy="true" fetch="select">
    <key>
        <column name="STOCK_ID" not-null="true" />
    </key>
    <list-index></list-index>
    <one-to-many class="com.mkyong.stock.StockDailyRecord" />
</list>

我的第二个问题:现在假设我在我的表 STOCKDAILYRECORD(在数据库中)中添加了一个名为 indexCol 的列。所以在 Conception 中我们会:每个 Stock 都有一个 StockDailyRecord 列表,从 0 到 x 排序。这意味着 indexCol 相对于它的 Stock 是唯一的,但 在 STOCDAILYRECORD 中不是唯一的强>。我的想法对吗?

我的第三个问题是关于我在 stackoverflow 上找到的解决方案:Hibernate one to many mapping works with a list but not a set?,在投票最高的答案中,它说我们可以将对象声明为 Collection 并将其实例化为 ArrayList 并使用如果我们想避免 list,请在 xml 映射文件中添加 bag。那么是否可以将其声明为 ArrayList 而不是 Collection? 提前非常感谢您 :)

【问题讨论】:

    标签: hibernate arraylist indexing one-to-many bag


    【解决方案1】:

    使用 List 有什么问题?您可以将其作为arraylist 进行管理。例如:

    <bag name="stockDailyRecords" table="stock_daily_record" inverse="true" lazy="true" fetch="select">
    <key column="STOCK_ID"/>
    <many-to-many column="recordId" fetch="select" lazy="false" class="com.mkyong.stock.StockDailyRecord"/>
    </bag>
    

    记住ArrayList实现了List接口,顺便说一下,这两个对象的方法是一样的。

    【讨论】:

    • 所以你的意思是我们可以在我们的模型中使用“ArrayList”或“List”,并在映射“bag”中使用,没有任何问题?
    • 是的,但是您能解释一下为什么需要将 List 实例化为 ArrayList 吗?
    • 因为 List 是一个抽象类,我们不能实例化它,我们只能将一个对象声明为一个列表,有点期待多态性.. 但在我的情况下不需要多态性,所以我可以声明它并将其实例化为 ArrayList
    • 你可以用List&lt;StockDailyRecord&gt; stockDailyRecords = new ArrayList&lt;&gt;();做到这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2011-04-07
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多