我想要一个包含id,名称和值的java类(MyClass),其中值可以是基本类型(字符串,整数,长整数)或列表或映射。该课程将使用JPA 2.0
保留我的第一个想法是关于具有以下结构的类:
,-----------.
| MyClass |
|...........|
| id |
| name |
| index |
| key |
| value |
'------------
如果存储基元或列表或地图,则通过getter和setter解析 - 取决于{index,key,value}组合。
替代方案是继承层次结构:
................. | AbstractClass | ,.- ................''--..__ _,-'' | `--.._ ,-' | ................ ...................... | |MapValueClass | | PrimitiveValueClass| | ................ ...................... | .................. | ListValueClass | ..................
请记住,我使用的是JPA:这个问题是否存在“标准方式”或“最佳实践”?某种方式,我可以使用myClass并通过getter访问该值并使用instanceof Map / List / Integer决定保持什么样的值?
答案 0 :(得分:1)
我找到了一个适用于我的解决方案:基类和保存派生类的值:
基类:
package jpa.inheritance_demo;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
@Entity
public class Resource {
@Id
private long oid;
@OneToMany
@JoinColumn(name="OID")
private List<Property> props;
}
标量属性类:
package jpa.inheritance_demo;
import javax.persistence.Entity;
@Entity
public class ScalarProperty extends Property {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
列出属性类:
package jpa.inheritance_demo;
import java.util.List;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
@Entity
public class ListProperty extends Property {
@ElementCollection
List<String> value;
public List<String> getValues() {
return value;
}
}
...不要忘记将类添加到persistence.xml