Problem with entity persist with bidirectional relationship
lukasw44 Sep 20, 2012 11:35 AMHello
Info : in my app i am using Mysql so im using
@GeneratedValue(strategy=GenerationType.IDENTITY) |
for id key;
So first of all i am modify standard spring mvc example application and add bidirectional relationship with new entities Orders :
My standard supper abstract class Person:
@MappedSuperclass @Inheritance(strategy=InheritanceType.JOINED) public abstract class Person { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; @NotNull @Size(min = 1, max = 25) @Pattern(regexp = "[A-Za-z ]*", message = "must contain only letters and spaces") private String name; public Person(String name) { super(); this.name = name; }
My entity Member extends Person look like:
@Entity @Table(uniqueConstraints = @UniqueConstraint(columnNames = "email")) public class Member extends Person implements Serializable { /** Default value included to remove warning. Remove or modify at will. **/ private static final long serialVersionUID = 1L; @NotNull @NotEmpty @Email private String email; @NotNull @Size(min = 10, max = 12) @Digits(fraction = 0, integer = 12) @Column(name = "phone_number") private String phoneNumber; @OneToMany(cascade=CascadeType.ALL , mappedBy="member") private List<UOrder> orders; public Member() { super(); } public Member(String name, String email, String phoneNumber ,List<UOrder> orders) { super(name); this.orders = orders; this.email = email; this.phoneNumber = phoneNumber; } ........///getters and setters
please see field orders and her annotation:
@OneToMany(cascade=CascadeType.ALL , mappedBy="member")
And fine my class Order look like :
@Entity public class UOrder { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer id; private float price; @ManyToOne(optional=false) private Member member; private String name;
So it is simply bi @OneToMany bi directional relationship with entity Member and Order
So i have got cascade all and when i need persist enttiy Membere i also need persist all orders
So i wrote simple Junit test for this operation below all standard test :
@Test public void testInsertWithOrder(){ UOrder order = new UOrder(20.0f, "first stuff"); UOrder order2 = new UOrder(40.0f, "secondary stuff"); List<UOrder> orders = new ArrayList<UOrder>(); orders.add(order2); orders.add(order); Member member = new Member("Member name", "member23@gmail.com", "2125552141", orders); memberDao.register(member); List<Member> members = memberDao.findAllOrderedByName(); Assert.assertNotNull(members); Assert.assertEquals(1, members.size()); }
But i have got error first hibernate error :
NULL not allowed for column "MEMBERID"; SQL statement: insert into UOrder (id, memberId, name, price) values (null, ?, ?, ?) [23502-165] 2012-09-20 17:25:51 org.springframework.test.context.transaction.TransactionalTestExecutionListener endTransaction INFO: Rolled back transaction after test execution for test context [[TestContext@308a1f38 testClass = MemberDaoTest, testInstance = org.jboss.tools.example.springmvc.test.MemberDaoTest@5ad3c69c, testMethod = testInsertWithOrder@MemberDaoTest, testException = javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: Pole nie moze byc puste "MEMBERID" NULL not allowed for column "MEMBERID"; SQL statement:
So what is gooing on ?? plz help i attach this simple application thx for replies
-
springmvctest.zip 121.4 KB