我检查了 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 标签映射时,我们需要一个索引。
所以我的第一个问题是:是否可以将索引列表保留为空?
<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 是唯一的,但在 STOCKDAILYRECORD 中不是唯一的强>。我的想法正确吗?
我的第三个问题是关于我在 stackoverflow 上找到的解决方案:Hibernate one to many mapping works with a list but not a set? ,在得票最高的答案中,它说我们可以将对象声明为 Collection 并将其实例化为 ArrayList 并在 xml 映射文件中使用 bag 如果我们想避免 <强>列表强>。那么是否可以声明它为ArrayList而不是Collection?提前非常感谢:)
最佳答案
使用 List 时出现什么问题?您可以将其作为数组列表进行管理。例如:
<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 接口(interface),顺便说一句,这两个对象具有相同的方法。
关于hibernate - 一对多 hibernate 映射中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11622569/