ताज़ा मैं निम्नलिखित डोमेन मॉडलत्रुटि जेपीए इकाई
Currency ----<Price>---- Product
या अंग्रेजी में
A Product has one or more Prices. Each Price is denominated in a particular Currency.
Price
एक समग्र प्राथमिक कुंजी (नीचे PricePK
द्वारा प्रतिनिधित्व) जो विदेशी कुंजी के लिए बना है है Currency
और Product
। जेपीए-एनोटेट जावा वर्गों के प्रासंगिक अनुभाग नीचे (getters और setters ज्यादातर छोड़े गए) हैं:
@Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Currency {
@Id
private Integer ix;
@Column
private String name;
@OneToMany(mappedBy = "pricePK.currency", cascade = CascadeType.ALL, orphanRemoval = true)
@LazyCollection(LazyCollectionOption.FALSE)
private Collection<Price> prices = new ArrayList<Price>();
}
@Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Product {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToMany(mappedBy = "pricePK.product", cascade = CascadeType.ALL, orphanRemoval = true)
@LazyCollection(LazyCollectionOption.FALSE)
private Collection<Price> defaultPrices = new ArrayList<Price>();
}
@Embeddable
public class PricePK implements Serializable {
private Product product;
private Currency currency;
@ManyToOne(optional = false)
public Product getProduct() {
return product;
}
@ManyToOne(optional = false)
public Currency getCurrency() {
return currency;
}
}
@Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Price {
private PricePK pricePK = new PricePK();
private BigDecimal amount;
@Column(nullable = false)
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
@EmbeddedId
public PricePK getPricePK() {
return pricePK;
}
@Transient
public Product getProduct() {
return pricePK.getProduct();
}
public void setProduct(Product product) {
pricePK.setProduct(product);
}
@Transient
public Currency getCurrency() {
return pricePK.getCurrency();
}
public void setCurrency(Currency currency) {
pricePK.setCurrency(currency);
}
}
मैं refresh को Product
का एक उदाहरण का प्रयास करते हैं, मैं एक StackOverflowError मिलता है, तो मैं वहाँ चक्र के कुछ प्रकार है संदेह (या अन्य गलती) उपरोक्त मानचित्रण में, क्या कोई इसे खोज सकता है?
+1, अच्छी तरह से सवाल उठाया। हालांकि, मैं डोमेन मॉडल के बारे में उत्सुक हूं। यह अजीब लगता है कि 'मूल्य' को 'उत्पाद' + 'मुद्रा' द्वारा स्पष्ट रूप से पहचाना जाता है, कहें, इसके (स्केलर) मान +' मुद्रा'। –
धन्यवाद मैट, वास्तव में 'मूल्य' वर्ग में 'बिगडिसीमल राशि' फ़ील्ड भी है, लेकिन मैंने इसे यहां छोड़ दिया क्योंकि यह प्रश्न के लिए प्रासंगिक नहीं है, और मैं कोड सूची को जितना संभव हो सके –