我发现了类似的问题,但他们没有回答我的问题。
我有两个具有多对一关系的实体-单向的。 但最重要的是,这种关系是懒惰的。因为使用惰性连接是正确的,所以每个人都知道。
代码:
@Entity
public class User implements BaseEntity {
@Id
@Column
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String name;
@ManyToOne(fetch = FetchType.LAZY)
private City city;
}
@Entity
public class City implements BaseEntity {
@Id
@Column
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String name;
}
interface BaseEntity {
void setId(Long id);
Long getId();
}
我编写了一种方法,该方法使您可以按实体的已传输字段进行搜索。 一个如何工作的示例:
public class Search<T extends BaseEntity> {
public List<T> getByFields(T entity, List<FieldHolder> data) {
// create criteria with passed field name and value by reflection
}
}
class FieldHolder {
private String fieldName;
private Object value;
/**
* "true" - means that the field "value" contains id related object
* "false" - elementary type like: String, Wrapper, Primitive
*/
private boolean isRelationId;
}
问题是当您需要搜索和相关对象时(通过创建相关查询),问题就开始了。
以下条目用于发送关联的字段:“ city.id”,问题是当我转移相关对象(城市)的本质时,它在代理中,无法通过城市反射获得ID
如果您指定以下内容,我的功能将完美运行
:@ManyToOne(fetch = FetchType.EAGER)
private City city;
但是由于我有很多相关的对象,所以它将极大地影响性能。因此,我想解决这个问题以免延迟加载。
我知道这不是一件容易的事。但是也许有一些机会可以解决这个问题。