gpt4 book ai didi

java - hibernate : Attribute "type" must be declared for element type "column"

转载 作者:行者123 更新时间:2023-12-01 11:14:46 25 4
gpt4 key购买 nike

我正在尝试使用 Hibernate 保存到 SQL Server 中的两个表:ORDER 和 ORDER_ITEM我收到错误:必须为元素类型“column”声明属性“type”。初始 SessionFactory 创建失败。org.hibernate.InvalidMappingException:无法读取 XML。

这会产生 NullPointerException

如果我理解正确的话,这意味着当我尝试保存到 order_item 表时,外键的 getter 为空,但是如果设计为“自动增量”,我将如何设置它,我认为 hibernate 会处理这在它的事务中。

下面是我的 POJO 和 Hibernate 映射。我在此复制/粘贴中省略了 getter 和 setter,但它们存在于我的实际代码中

如果删除该集合,我也可以成功保存到 ORDER 表

订单.java:

public class Order {
public Order(){
super();
}

private int orderId;
private Set<LineItem> items;
private String strPhone;
private String strEmail;
private String strFirstName;
private String strLastName;
private String strParentFirstName;
private String strParentLastName;
private String strOrganizationName;
private String strOrganizationType;
private String strComment;

}

order.hbm.xml:

<hibernate-mapping>
<class name="dbobjects.Order" table="orders">

<id name="orderId" type="integer" column="order_id">
<generator class="increment"/>
</id>

<property name="strPhone" type="string" column="phone_number"/>
<property name="strFirstName" type="string" column="first_name"/>
<property name="strLastName" type="string" column="last_name"/>
<property name="strParentFirstName" type="string" column="parent_first_name"/>
<property name="strParentLastName" type="string" column="parent_last_name"/>
<property name="strOrganizationName" type="string" column="organization_name"/>
<property name="strOrganizationType" type="string" column="organization_type"/>
<property name="strComment" type="string" column="comments"/>

<set name="items" table="order_item" fetch="select" cascade="all">
<key>
<column name="orderId" type="java.lang.Integer"/>
</key>
<one-to-many class="dbobjects.LineItem"/>
</set>

</class>

LineItem.java:

public class LineItem {

public LineItem(){
super();
}

private int orderItemId;//this will be the primary key
private int orderId;//this is the foreign key to the order
private String age;
private String gender;
private String type;
private String itemSize;
private int itemQuantity;

}

lineItem.hbm.xml:

<id column="order_item_id" name="orderItemId" type="integer">
<generator class="increment"/>
</id>

<property column="age" name="age" type="string"/>
<property column="gender" name="gender" type="string"/>
<property column="quantity" name="itemQuantity" type="integer"/>
<property column="size" name="itemSize" type="string"/>
<property column="clothing_type" name="clothingType" type="string"/>

<many-to-one name="orderId" class="dbobjects.Order" fetch="select" column="order_id" type="java.lang.Integer"/>

这是我实例化 session 时抛出错误的地方:

**session = HibernateUtil.getSessionFactory().openSession();**←
try{
session.beginTransaction();
session.save(order);
session.getTransaction().commit();

所以问题是:如何使用无法作为外键被另一个表访问的“自动增量”主键来处理这种情况

最佳答案

所以,有一些问题:

为了向数据库提交“子项”,我需要显示谁是父项。这意味着我的 LineItem 类需要一个

Order order;

属性而不是简单的

private String orderID;

这是在 Order 对象准备好提交到数据库之后但在实际调用之前完成的:

 for (LineItem item : order.getItems()) {
item.setOrder(order);
}

我还更改了我的 DTD:!DOCTYPE hibernate-configuration SYSTEM classpath://org/hibernate/hibernate-mapping-3.0.dtd"

!DOCTYPE hibernate 映射 PUBLIC “-//Hibernate/Hibernate 映射 DTD 3.0//EN” ” http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd

关于java - hibernate : Attribute "type" must be declared for element type "column",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31969454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com