java - 想要手动反序列化我的 Hibernate 实体。有没有办法模仿@GeneratedValue?
问题描述
春季启动新手在这里。我正在为我的一个数据库实体创建一个反序列化类,但是当我以这种方式反序列化时,似乎没有调用 @GeneratedValue 并且没有创建 id。
数据库似乎对空 id 没有问题,但我需要 id。
有没有更好的方法以这种方式进行反序列化?
这是有问题的@Entity 类。
@Entity
public class ListComparison <T extends ListData> {
@GeneratedValue
@Id
public Long id;
@JsonIgnore
public String listElementClass;
@JsonIgnore
public int listlength;
@JsonIgnore
@OneToMany(cascade= {CascadeType.ALL},mappedBy="listComparison", targetEntity = TimeEntity.class)
Map<String,TimeEntity> arrayListTimes;
@JsonIgnore
@OneToMany(cascade= {CascadeType.ALL},mappedBy="listComparison", targetEntity = TimeEntity.class)
Map<String,TimeEntity> linkedListTimes;
@JsonIgnore
@OneToMany(mappedBy="listComparison",targetEntity=ListData.class)
public List<T> list;
@JsonIgnore
@Transient
private Class<T> listComparisonClass;
@JsonIgnore
@Transient
private static final String[] times = {"Sort","Insert","Delete"};
public Long getID() {
return this.id;
}
public ListComparison() {
System.out.println(id);
this.id = 0L;
//hashmaps to store times for each operation
arrayListTimes = new HashMap<String,TimeEntity>();
linkedListTimes = new HashMap<String,TimeEntity>();
//initializes the map
for (String i: times) {
arrayListTimes.put(i, TimeEntity.getTimeEntity(0));
linkedListTimes.put(i,TimeEntity.getTimeEntity(0));
}
}
public void generateLists(Class listType) {
this.listElementClass = listType.getSimpleName();
this.list = new ArrayList();
this.listlength=list.size();
/*if (listElementClass.equals(String.class)) {
for (int i = 0; i < listlength; i++) {
arrayList.add((T) (Comparable) string);
linkedList.add((T) (Comparable)string);
}
} else if(listElementClass.equals(Computer.class)) {
Random random = new Random();
for (int i =0; i < listlength; i++) {
Computer computer = new Computer((int)(128+random.nextFloat()*(2000-128)), "Computer: "+String.valueOf(i+1));
arrayList.add((T) (Comparable)computer);
linkedList.add((T) (Comparable)computer);
}
} else {
Random random = new Random();
for (int i = 0; i < listlength; i++) {
//sets the range of numbers
Integer integer = (int) (0+random.nextFloat()*(10-0));
arrayList.add((T) (Comparable)(integer));
linkedList.add((T) (Comparable)(integer));
}
}*/
}
public ListData createElement(String elementData) {
String elementdata = elementData;
if (listElementClass.equals("String")) {
return new ListData(elementData);
} else if (listElementClass.equals("Computer")) {
/*if (elementData.size()==2 && elementData.get("1") != null) {
return (ListData) (Comparable) new Computer(elementdata[0], Integer.parseInt(elementdata[1]));
} else {
*/ return new ListData(new Computer(elementdata));
//}
} else {
return new ListData(Integer.parseInt(elementData));
}
}
这是采用反序列化对象的映射函数(在 RESTful 控制器中)。我希望它返回带有纯文本正文的 ResponseEntity,我可以在客户端接收到该正文。那里一切都很好,除了当我尝试获取 id 时,它返回 null。
@PostMapping(value ="/labs/Vihan/ListComparison/", produces= MediaType.TEXT_PLAIN_VALUE, consumes= MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity createListWithType(@RequestBody ListComparison listComparison) throws JsonProcessingException {
String test = listComparison.getID().toString();
System.out.println(test);
return ResponseEntity.ok("test");
}
这是反序列化器类
public class ListComparisonDeserializer extends JsonDeserializer<ListComparison> {
@Override
public ListComparison deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
Map dictionary = ListRestController.getDictionary();
JsonNode node = jp.getCodec().readTree(jp);
String type = node.get("type").textValue();
if (dictionary.containsKey(type)) {
ListComparison listComparison = new ListComparison();
listComparison.generateLists((Class) dictionary.get(type));
return listComparison;
} else {
throw new ListTypeNotFoundException(type);
}
}
}
这是我发送到该映射的 json
{
'type': 'Integer'
}
解决方案
推荐阅读
- google-chrome - 添加到主屏幕迷你信息栏不会触发我的应用程序
- spring-integration - 如何为通过 Spring 集成使用的消息设置 jms 标头
- node.js - How to do downloadable file in response from the bot
- c# - Better way to load fk without navigation property
- python - statsmodel ARIMA dynamic forecasting with exogenous regressor
- docker - docker-machine create command hangs at waiting for an IP
- python - 字典列表:按字典的值排序
- css - 如何使 ng-show/ng-hide 过渡动画更流畅
- r - 如何将数据合并为一个?
- amazon-web-services - Column name with a Space - Athena