我会尽可能具体,所以我想只是要求litle帮助修改这个hbm.xml文件
我的hibernate映射中有这个文件
<hibernate-mapping>
<class name="sk.bantip.hotel.server.dao.book.Dealer" table="book_dealer">
<id column="idBook_dealer" name="id" type="java.lang.Long">
<generator class="identity" />
</id>
<many-to-one name="domain" column="idMain_domain"
not-null="true" class="sk.bantip.hotel.server.dao.main.Domain" />
<many-to-one name="activeData" column="idBook_dealerData"
class="sk.bantip.hotel.server.dao.book.DealerData" />
<set name="historyData" inverse="true">
<key column="idBook_dealer" />
<one-to-many class="sk.bantip.hotel.server.dao.book.DealerData" />
</set>
<property name="status" not-null="false" />
</class>
这是:
<hibernate-mapping>
<class name="sk.bantip.hotel.server.dao.book.DealerData" table="book_dealerData">
<id column="idBook_dealerData" name="id" type="java.lang.Long">
<generator class="identity" />
</id>
<property name="name" not-null="true"/>
<property name="registration" not-null="true"/>
<property name="taxNumber" not-null="true"/>
<property name="timestamp" not-null="true" />
<property name="authorUserId" column="idAuthor" not-null="true" />
<many-to-one name="dealer" column="idBook_dealer"
not-null="true" class="sk.bantip.hotel.server.dao.book.Dealer" />
<property name="channel" not-null="false">
<type name="sk.bantip.core.enums.GenericEnumUserType">
<param name="enumClass">sk.bantip.hotel.server.dao.book.Channel</param>
<param name="identifierMethod">getValue</param>
<param name="valueOfMethod">getByCode</param>
</type>
</property>
<property name="street" not-null="false" />
<property name="number" not-null="false" />
<property name="zip" not-null="false" />
<property name="city" not-null="false" />
<property name="country" not-null="false" />
<property name="telephone" not-null="false" />
<property name="email" not-null="false" />
</class>
我发现一些指南说使用级联操作,当我得到
org.hibernate.瞬态ObjectException:对象引用一个未保存的瞬态实例-在刷新之前保存瞬态实例:
但是我不知道使用哪种方法,我知道cascade=“all”但是我不知道在这种情况下是否有效,我使用这种方法来保存/更新:
public void ajaxNameListener(AjaxBehaviorEvent event) {
for(DealerListView diler : dealerList) {
if(diler.getDealerId() == getSelectedDealerId()) {
diler.setDealerId(selectedDealerId);
DealerData dilerko = new DealerData();
dilerko.setName(selectedDealerName);
Dealer dealer = BeanFactory
.getHotelDAOService(Dealer.class)
.findOne(selectedDealerId);
dealer.setActiveData(dilerko);
BeanFactory.getHotelDAOService(Dealer.class).update(dealer);// line 220 - in stacktrace is (at sk.bantip.hotel.web.controller.SalesController.ajaxNameListener(SalesController.java:220))
}
}
}
基于这种情况,有人能给我一个建议吗?我认为这些hbm必须做出一些改变。xml文件,关于一些级联操作,但不确定这将是什么,请留下一些帖子给我,我会很高兴为任何帮助谢谢你,祝你有一个愉快的一天。
编辑:在子类DealerData中,我有一个私有属性,对此不确定,但可能需要在DealerData中添加此属性access=“field”
。哈佛商学院。xml?因为这允许Hibernate从私有变量而不是公共属性读取值。
cascade
基本上用于父子关系(例如一对一、多对一、一对多、多对多关联)。
在父类的映射文件中定义子关系时,如果指定cascade=“save update”
,则其工作原理如下:
每当您保存父类的实例时,如果有任何子实例与之关联,它们也会被保存(如果是瞬态的)/更新(如果已经持久化)。在这种情况下,您将不会获得'瞬态对象异常'
。
但是如果您指定了cascade="刷新"
,它的工作方式如下:
每当您保存父类的实例时,只会保存该实例。如果任何子类的实例与之关联,它们将不会被保存/更新。
话虽如此,如果子类的实例没有持久化到数据库中,它只会抛出“TransientObjectException”
。为了避免这种情况,必须在保存父类实例之前手动保存子类实例。
通过这里的示例查看不同的级联选项。
不是像你在哈佛商学院所做的决定那样强烈支持级联。XML是否级联必须在整个应用程序中保持一致,再加上您不太确定想要哪种类型的级联,我宁愿使用更简单的方法。在您的用例中添加以下内容是否是一个坏主意:
someDealerDataDAO.persist(dilerko);
就在引发错误的陈述之前。
我有一个主表和一个表,它们之间有一对一的关系。在添加
我试图在名为Person和Address的两个实体之间建立单向关系,同时保存Person(包含地址集合)获取组织。冬眠TransientObjectException:对象引用未保存的临时实例。 当我更改cascadeType=all时,子对象正在传播。但这里的问题是cascadeType=all Hibernate在删除所属实体时也会尝试删除子实体。我不希望发生这种情况,因为在很多关系中,子实体
我正在尝试将值更新到表中。如果新创建和保存的日期范围id工作正常。但是当试图更新现有日期范围id的值时,它会给我一个错误“org”。冬眠TransientObjectException:对象引用未保存的临时实例-在刷新之前保存临时实例:'。如何更新两种情况下的表值?
我在我的项目中使用Spring引导和Spring数据,我有两个类: 第二类是: 增加任务的方法: 当我试图添加一个新任务时,它在Json对象上面给出了一个错误: {"出发":"fff","到达":"ffff","isFreeWayEnable": false,"车站":[{"id": 1},{"id": 2}]}
我对JPA和manytoone的关系感到困惑,我有一个类“Judiction”,它有很多“Judidget”,当我试图将一个Judidge实例存储到postgres db中时,它抛出错误消息如下: 判断类: 还有我的服务课: 在我的数据库中,我有判断表和用户表,我需要为多通关系创建一个作为判断用户的表吗?
问题内容: 使用Hibernate保存对象时收到以下错误 问题答案: 你应该在集合映射中包括如果使用xml)或(如果使用注释)。 发生这种情况是因为你的实体中有一个集合,并且该集合具有一个或多个数据库中不存在的项目。通过指定上述选项,你可以告诉hibernate在保存其父项时将它们保存到数据库中。