本文dsl实体类由apt-maven-plugin build生成。
我们以四个实体类School, Clazz, Course, User为例。其中User类包含Course类,以此类推,逐层包含。
首先以QUser类为例来看内部实体对象的构建。只贴出了解读用到的代码。
public class QUser extends EntityPathBase<User> {
private static final PathInits INITS = PathInits.DIRECT2;
public static final QUser user = new QUser("user");
public QUser(String variable) {
this(User.class, forVariable(variable), INITS);
}
public QUser(Class<? extends User> type, PathMetadata metadata, PathInits inits) {
super(type, metadata, inits);
this.course = inits.isInitialized("course") ? new QCourse(forProperty("course"), inits.get("course")) : null;
}
}
我们可以看到,Q类的PathInits为PathInits.DIRECT2。当调用Q类的只有PathMetadata的构造参数时,会调用PathInits.getFor(metadata, INITS)方法。而当我们创建Q类时,只有Pathinits.isInitialized()=&