一、结构
二、代码
1.
1 package org.jpwh.model.inheritance.embeddable; 2 3 import javax.persistence.MappedSuperclass; 4 import javax.validation.constraints.NotNull; 5 6 @MappedSuperclass 7 public abstract class Measurement { 8 9 @NotNull 10 protected String name; 11 12 @NotNull 13 protected String symbol; 14 15 // ... 16 protected Measurement() { 17 } 18 19 public Measurement(String name, String symbol) { 20 this.name = name; 21 this.symbol = symbol; 22 } 23 24 public String getName() { 25 return name; 26 } 27 28 public String getSymbol() { 29 return symbol; 30 } 31 32 public void setName(String name) { 33 this.name = name; 34 } 35 36 public void setSymbol(String symbol) { 37 this.symbol = symbol; 38 } 39 }
2.
1 package org.jpwh.model.inheritance.embeddable; 2 3 import javax.persistence.AttributeOverride; 4 import javax.persistence.AttributeOverrides; 5 import javax.persistence.Column; 6 import javax.persistence.Embeddable; 7 import javax.validation.constraints.NotNull; 8 import java.math.BigDecimal; 9 10 @Embeddable 11 @AttributeOverrides({ 12 @AttributeOverride(name = "name", 13 column = @Column(name = "DIMENSIONS_NAME")), 14 @AttributeOverride(name = "symbol", 15 column = @Column(name = "DIMENSIONS_SYMBOL")) 16 }) 17 public class Dimensions extends Measurement { 18 19 public static Dimensions centimeters(BigDecimal width, BigDecimal height, BigDecimal depth) { 20 return new Dimensions("centimeters", "cm", width, height, depth); 21 } 22 23 public static Dimensions inches(BigDecimal width, BigDecimal height, BigDecimal depth) { 24 return new Dimensions("inches", "\"", width, height, depth); 25 } 26 27 @NotNull 28 protected BigDecimal depth; 29 30 @NotNull 31 protected BigDecimal height; 32 33 @NotNull 34 protected BigDecimal width; 35 36 // ... 37 public Dimensions() { 38 } 39 40 public Dimensions(String name, String symbol, BigDecimal width, BigDecimal height, BigDecimal depth) { 41 super(name, symbol); 42 this.height = height; 43 this.width = width; 44 this.depth = depth; 45 } 46 47 public BigDecimal getDepth() { 48 return depth; 49 } 50 51 public BigDecimal getHeight() { 52 return height; 53 } 54 55 public BigDecimal getWidth() { 56 return width; 57 } 58 59 public void setDepth(BigDecimal depth) { 60 this.depth = depth; 61 } 62 63 public void setHeight(BigDecimal height) { 64 this.height = height; 65 } 66 67 public void setWidth(BigDecimal width) { 68 this.width = width; 69 } 70 71 public String toString() { 72 return String.format("W:%s%s x H:%s%s x D:%s%s", this.height, this.symbol, this.width, this.symbol, this.depth, this.symbol); 73 } 74 }
3.
1 package org.jpwh.model.inheritance.embeddable; 2 3 import javax.persistence.AttributeOverride; 4 import javax.persistence.AttributeOverrides; 5 import javax.persistence.Column; 6 import javax.persistence.Embeddable; 7 import javax.validation.constraints.NotNull; 8 import java.math.BigDecimal; 9 10 @Embeddable 11 @AttributeOverrides({ 12 @AttributeOverride(name = "name", 13 column = @Column(name = "WEIGHT_NAME")), 14 @AttributeOverride(name = "symbol", 15 column = @Column(name = "WEIGHT_SYMBOL")) 16 }) 17 public class Weight extends Measurement { 18 19 public static Weight kilograms(BigDecimal weight) { 20 return new Weight("kilograms", "kg", weight); 21 } 22 23 public static Weight pounds(BigDecimal weight) { 24 return new Weight("pounds", "lbs", weight); 25 } 26 27 @NotNull 28 @Column(name = "WEIGHT") 29 protected BigDecimal value; 30 31 // ... 32 public Weight() { 33 } 34 35 public Weight(String name, String symbol, BigDecimal weight) { 36 super(name, symbol); 37 this.value = weight; 38 } 39 40 public BigDecimal getValue() { 41 return value; 42 } 43 44 public void setValue(BigDecimal value) { 45 this.value = value; 46 } 47 48 public String toString() { 49 return String.format("%s%s", this.value, this.symbol); 50 } 51 }
4.
1 package org.jpwh.model.inheritance.embeddable; 2 3 import org.jpwh.model.Constants; 4 5 import javax.persistence.Entity; 6 import javax.persistence.GeneratedValue; 7 import javax.persistence.Id; 8 import javax.validation.constraints.NotNull; 9 import javax.validation.constraints.Size; 10 11 @Entity 12 public class Item { 13 14 15 @Id 16 @GeneratedValue(generator = Constants.ID_GENERATOR) 17 protected Long id; 18 19 @NotNull 20 @Size( 21 min = 2, 22 max = 255, 23 message = "Name is required, maximum 255 characters." 24 ) 25 26 protected String name; 27 28 protected Dimensions dimensions; 29 30 protected Weight weight; 31 32 // ... 33 34 public Item() { 35 } 36 37 public Item(String name, Dimensions dimensions, Weight weight) { 38 this.name = name; 39 this.dimensions = dimensions; 40 this.weight = weight; 41 } 42 43 public Dimensions getDimensions() { 44 return dimensions; 45 } 46 47 public Long getId() { // Optional but useful 48 return id; 49 } 50 51 public String getName() { 52 return name; 53 } 54 55 public Weight getWeight() { 56 return weight; 57 } 58 59 public void setDimensions(Dimensions dimensions) { 60 this.dimensions = dimensions; 61 } 62 63 public void setName(String name) { 64 this.name = name; 65 } 66 67 public void setWeight(Weight weight) { 68 this.weight = weight; 69 } 70 71 }
5.