Note that there are some explanatory texts on larger screens.

plurals
  1. POUnable to persist a transient object with composite key
    primarykey
    data
    text
    <p>I have a <code>Hibernate(3.3)</code> entity <code>Basket</code>: </p> <pre><code>@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 } </code></pre> <p>with the <code>BasketId</code> as is:</p> <pre><code>@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 } </code></pre> <p>The problem is when I want to save a transient <code>Order</code> with autowired <code>SessionFactory session</code> as <code>session().save(o)</code>:</p> <pre><code>@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&lt;Basket&gt; basketItems; public Order() {} //generated getter and setters } </code></pre> <p>I get the foolowing exception:</p> <pre><code>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) ... </code></pre> <p>The item in the stacktrace is: </p> <pre><code>public class Item { //other fields @OneToMany(mappedBy = "id_item") private Set&lt;Basket&gt; basketsWithThisItem; public Item() {} //generated getter and setters } </code></pre> <hr> <p>I tried with different constructors of <code>BasketId</code> (as <code>(Item, Order)</code>, and <code>(int,int)</code>) as show above, and added <code>Object</code> constructors to <code>Basket</code>. Next was doing a <code>merge()</code> instead of <code>save()</code> but nothing helps. </p> <p>Thanks in advance.</p> <p><strong>EDIT</strong> Getters and Setters are there. I use the create function implemented as:</p> <pre><code>@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); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload