2010-12-30 40 views
6

Tôi có vấn đề rất lạ chúng tôi đang sử dụng jpa 2.0 với chú thích ngủ đông dựa trên cơ sở dữ liệu được tạo ra thông qua JPA DDL là đúng và MySQL làm Cơ sở dữ liệu;Nhà cung cấp JPA 2.0 Hibernate

tôi sẽ cung cấp một số lớp tham chiếu và sau đó là biểu trưng của tôi.

@MappedSuperclass 
public abstract class Common implements serializable{ 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "id", updatable = false) 
private Long id; 

@ManyToOne 
@JoinColumn 
private Address address; 
     //with all getter and setters 
     //as well equal and hashCode 

} 

@Entity 
public class Parent extends Common{ 
     private String name; 
     @OneToMany(cascade = {CascadeType.MERGE,CascadeType.PERSIST}, mappedBy = "parent") 
     private List<Child> child; 
     //setters and rest of class 
} 

@Entity 
public class Child extends Common{ 
//some properties with getter/setters 
} 

@Entity 
public class Address implements Serializable{ 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "id", updatable = false) 
private Long id; 

     private String street; 
     //rest of class with get/setter 

} 

như trong mã bạn có thể thấy rằng các bậc cha mẹ và các lớp con mở rộng lớp chung để cả hai đều có sở hữu địa chỉ và id, vấn đề xảy ra khi thay đổi các refference địa chỉ trong lớp cha nó phản ánh cùng một sự thay đổi trong tất cả các đối tượng trẻ em trong danh sách và nếu địa chỉ thay đổi refference trong lớp trẻ đó trở đi sáp nhập nó sẽ thay đổi địa chỉ refference của cha mẹ cũng

tôi không thể hình dung ra là nó là vấn đề của JPA hoặc ngủ đông

+1

Có một chút thông tin bản đồ bị thiếu ở đây. Bạn đang cố gắng để bản đồ thừa kế hoặc làm bạn chỉ là những gì riêng biệt bảng PARENT và bảng con với cấu trúc tương tự? Bạn có thể bao gồm chú thích Cấp lớp (@Entity v.v.) khi bạn có chúng. –

+0

Đã xóa các tham chiếu đến Spring MVC, vì nó không liên quan và gây nhầm lẫn vấn đề. – skaffman

+0

cảm ơn Davis có tôi quên đặt các chú thích này, thực ra tôi đang có một bảng riêng cho cha mẹ và con với các trường từ lớp thừa kế chung. điều tôi không thể hiểu được là tại sao nó thay đổi tham chiếu của child-> address trong parent. khi tôi chỉ thay đổi tham chiếu địa chỉ cho phụ huynh – Rooh

Trả lời

1

Nếu bạn đã chia sẻ trường hợp của địa chỉ , những thay đổi được thực hiện khi nó nằm trong "phạm vi" của một đứa trẻ không ảnh hưởng đến cha mẹ, bởi vì bạn đang xử lý cùng một cá thể Address trong đối tượng cha.

Ví dụ:

Parent1.address => Address #1 
Child1.address => Address #2 
Child2.address => Address #2 
Child3.address => Address #1 

Trong trường hợp này, nếu bạn thay đổi Child3.address.street, nó có nghĩa là nó cũng thay đổi Parent1.address.street. Lưu ý rằng những gì làm cho Địa chỉ trong Parent1 và Child3 giống nhau là ID. Nếu chúng giữ cùng một ID, chúng là cùng một cá thể (ví dụ: "được chia sẻ" trong cả hai đối tượng).

+0

partenon đối tượng cha mẹ không được chia sẻ của nó có địa chỉ riêng và đối tượng chlid có địa chỉ riêng. để các đối tượng khác nhau không phải là đối tượng được chia sẻ, chỉ cần đặt trong lớp phổ biến beacuse của quản lý mã ngay cả tôi đã đặt địa chỉ trong lớp khác biệt bằng cách loại bỏ lớp phổ biến và đặt tài sản địa chỉ trong cha mẹ và child.may có một số vấn đề với EntityManager – Rooh

Các vấn đề liên quan