我有一个Hibernate(3.3)
entityBasket
:
@Entity
@Table(name = "BASKETS")
@IdClass(BasketId.class)
public class Basket {
@ManyToOne
@Id
@JoinColumn(name = "id_order", referencedColumnName = "id_o")
private Order id_order;
@ManyToOne
@Id
@JoinColumn(name = "id_item", referencedColumnName = "id_i")
private Item id_item;
private int amount;
public Basket() {}
// generated getters and setters
}
按原样使用BasketId
:
@Embeddable
public class BasketId implements Serializable {
private int id_order;
private int id_item;
public BasketId() {}
public BasketId(Order o, Item i) {
id_order = o.getId_o();
id_item = i.getId_i();
}
// public BasketId(int id_order, int id_item) {
// this.id_item = id_item;
// this.id_order = id_order;
// }
//generated getter and setters
}
问题是当我想保存一个瞬态的订单
与自动生成的SessionFactory会话
作为会话()。保存(o)
:
@Entity
@Table(name = "ORDERS")
public class Order {
@Id
@GeneratedValue
@Column(name = "id_o")
private int id_o;
@Column(name = "date")
private Timestamp date;
@OneToMany(mappedBy = "id_order")
private Set<Basket> basketItems;
public Order() {}
//generated getter and setters
}
我得到了一个愚蠢的例外:
message Request processing failed; nested exception is org.hibernate.PropertyAccessException: could not set a field value by reflection setter of foo.server.hib.BasketId.id_item
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.PropertyAccessException: could not set a field value by reflection setter of foo.server.hib.BasketId.id_item
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
root cause
org.hibernate.PropertyAccessException: could not set a field value by reflection setter of foo.server.hib.BasketId.id_item
org.hibernate.property.DirectPropertyAccessor$DirectSetter.set(DirectPropertyAccessor.java:114)
org.hibernate.tuple.component.AbstractComponentTuplizer.setPropertyValues(AbstractComponentTuplizer.java:104)
...
root cause
java.lang.IllegalArgumentException: Can not set int field foo.server.hib.BasketId.id_item to foo.server.hib.Item
sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
sun.reflect.UnsafeIntegerFieldAccessorImpl.set(UnsafeIntegerFieldAccessorImpl.java:80)
...
stacktrace中的项目是:
public class Item {
//other fields
@OneToMany(mappedBy = "id_item")
private Set<Basket> basketsWithThisItem;
public Item() {}
//generated getter and setters
}
如上图所示,我尝试了BasketId
(作为(项目,订单)
,和(int,int)
)的不同构造函数,并将对象
构造函数添加到篮子
。接下来是执行merge()
,而不是save()
,但没有任何帮助。
提前谢谢。
编辑Getters和Setters在那里。我使用创建函数实现为:
@Transactional
public class HibOrderService implements OrderService {
@Autowired
private SessionFactory sessionFactory;
public Session session() {
return sessionFactory.getCurrentSession();
}
@Override
public void create(Order o) {
session().merge(o);
}
}
将访问器添加到您的@嵌入式类。get/setId_Order(),get/setId_Item()。
错误就存在于这里
Can not set int field foo.server.hib.BasketId.id_item to foo.server.hib.Item
public BasketId(Order o, Item i) {
id_order = o.getId_o();
id_item = i.getId_i();
}
这里的问题是什么i.getId_i()
返回
问题内容: 我有POJO类: 然后,我创建一张票证和一些地方: 现在,我想将其保存到数据库: 在MapperConfig.xml中,我这样写: 如何以自动模式保存 列表位置 ?MyBatis可以为我保存吗?还是我需要使用 foreach 手动进行迭代,然后手动插入每个 地方 ? 谢谢你的帮助。 问题答案: 即使MyBatis能够支持相反的方向(即在查询过程中使用嵌套选择或联接填充列表),也没有自动
Hibernate 认为持久化类(persistent class)新实例化的对象是瞬时(Transient)的。我们可通过将瞬时(Transient)对象与 session 关联而把它变为持久的(Persistent)。 DomesticCat fritz = new DomesticCat(); fritz.setColor(Color.GINGER); fritz.setSex('M');
我创建了一个简单的3实体数据模型,当试图持久化数据时,它不起作用。下面是实体及其id类,server: 服务: 容器: 创建的数据库似乎正常:
我得到了这个错误: 组织。冬眠TransientObjectException:对象引用未保存的临时实例-在刷新之前保存临时实例 我以前没有保存过的对象是: 我无法将CascadeType更改为All,因为该对象位于另一个方案中,我没有写入该方案的权限。 有什么想法吗? 谢啦
我有一个类通知,它包含一个对象MessengerData:
假设我想要一个复合键作为采购订单实体的street,city。 下面是我如何识别做这件事, 我想明白@AttributeOverrides注释到底是做什么的?即使我将colomn name更改为something STREET1,我仍然看到使用列名street创建的表。那么column=@column(name=“street”))在这里做什么。 另外,我可以将它作为PurchaseOrder类的