如何告诉休眠将调用哪个方法?我有一堂课,两张桌子

时间:2019-07-14 11:11:04

标签: java mysql hibernate

我有一堂课和两张桌子。 1.物品。 第一个表用于存储项目并向用户显示项目,用户从该表中选择项目。(我想从文件中读取项目)。

2.oredered_items: 在这里我要保存用户选择的项目。

这些表具有相同的列和数据类型。

public class Item {

    private Integer id;
    private String name;
    private Integer price;
}

XML映射:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="entities.Item" table="______________">

    <id name= "id" column="item_id" type="integer">

    </id>
    <property name="name" column="item_name" type="string"/>
    <property name="price" column="item_price" type="integer"/>

</class>
</hibernate-mapping>

这种读取文件并插入数据库的方法。

public void insertItems()
    {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tr = session.beginTransaction();
        Item currentItem;
        String str;
        String dataString[];
        try {
            File fileForReading = new File(PATH_FILE);
            FileReader fr = new FileReader(fileForReading);
            BufferedReader br = new BufferedReader(fr);
            while((str = br.readLine()) != null)
            {
                dataString = str.split(" ");
                Integer id = Integer.parseInt(dataString[INDEX_ID]);
                String name = dataString[INDEX_NAME];
                Integer price = Integer.parseInt(dataString[INDEX_PRICE]);
                currentItem = new Item(id,name,price);
                session.persist(currentItem);

            }
            tr.commit();
            session.close();

此方法从表Items中读取并显示给用户。

public void displayItems()

我该怎么办?

我只想将表项目用于从文件插入并向用户显示项目,并且当他选择所需内容时,它将项目存储在第二个表中。

我可以告诉hibernate:“此方法将映射到此表,并且此方法将映射到此表”吗?

也许要创建2个类?

1 个答案:

答案 0 :(得分:1)

选中此链接可将2个表映射到一个类 How to map one class with multiple tables in Hibernate/javax.persistance?

ps:您还可以只创建一个带有两个外键的映射表,以避免有关项的多余信息,并在您的类用户中添加一对多联接(一个用户可以与许多项相关),但是您的方式更像是“ DDD风格”