我有两个Java实体Obj和Trt,用于DB obj(ID,ID_TRT,...)和trt(ID,...)中的两个表,定义如下:
@MappedEntity("obj")
public class ObjEntity{
...
private TrtEntity trt;
...
@Nullable
@MappedProperty("ID_TRT")
@JoinColumn(name ="ID_TRT")
@Relation(value = Relation.Kind.MANY_TO_ONE)
public TraitementEntity getTrt() {
return trt;
}
public void setTrt(final TrtEntity trt) {
this.trt= trt;
}
...
}
@MappedEntity("trt")
public class TrtEntity{
private Long id;
private List<ObjEntity> objs;
....
@Relation(value = Relation.Kind.ONE_TO_MANY, mappedBy = "trt", cascade = { Relation.Cascade.ALL })
public List<ObjEntity> getObjs() {
return objs;
}
...
}
在类中,我们调用方法 ObjRepository.findAll(...),该方法应执行以下 SQL 查询:
select ID, ID_TRT, .... from obj where ...
有时我们会收到此查询,但有时我们会:
select ID, TRT_ID, .... from obj where ...
问题是,在 Micronaut Data 生成的查询中,ID_TRT 变成了 TRT_ID
有什么想法吗?
我找到了解决方案:
我在 ObjEntity 中添加了实体作为 trt 的前缀,并在 TrtEntity 中添加了 obj 的前缀:
@MappedEntity("obj")
public class ObjEntity{
...
private TrtEntity trtEntity;
...
@Nullable
@MappedProperty("ID_TRT")
@JoinColumn(name ="ID_TRT")
@Relation(value = Relation.Kind.MANY_TO_ONE)
public TraitementEntity getTrtEntity() {
return trtEntity;
}
public void setTrt(final TrtEntity trtEntity) {
this.trtEntity= trtEntity;
}
...
}
@MappedEntity("trt")
public class TrtEntity{
private Long id;
private List<ObjEntity> objsEntity;
....
@Relation(value = Relation.Kind.ONE_TO_MANY, mappedBy = "trt", cascade = { Relation.Cascade.ALL })
public List<ObjEntity> getObjsEntity() {
return objsEntity;
}
...
}