1

QueryDSLクエリに問題があります。クラス:

@Entity
@Table(name="project")
@Cacheable(true)
@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Project extends DomainObject implements Comparable<Project>, IconizedComponent, Commentable {

    @ManyToMany(targetEntity=Student.class)
    @JoinTable(name="project_student")
    @Sort(type=SortType.NATURAL) //Required by hibernate
        @QueryInit({"user"})
    private SortedSet<Student> projectParticipants = new TreeSet<Student>();

    private Project(){}

    //attributes, get+set methods etc

}

@Entity
@Cacheable(true)
@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) //Hibernate specific
public class Student extends Role {

    public Student(){}

    //attributes, get+set methods etc

}

@Entity
@DiscriminatorColumn(name = "rolename", discriminatorType = DiscriminatorType.STRING, length = 8)
@Table(name="role", uniqueConstraints={@UniqueConstraint(columnNames={"user_id","rolename"}, name = "role_is_unique")})
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public abstract class Role extends LazyDeletableDomainObject implements Comparable<Role> {

    @ManyToOne(optional=false)
    protected User user;

    public Role(){}

    //attributes, get+set methods etc
}

@Entity
@Table(name="user")
@Cacheable(true)
@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) //Hibernate specific
public class User extends LazyDeletableDomainObject implements Comparable<User>, IconizedComponent {

    private String firstName;
    private String lastName;

    public User(){}

    //attributes, get+set methods etc

}

クエリ:

private BooleanExpression authorsNameContains(String searchTerm){
        QUser user = new QUser("user");
        user.firstName.containsIgnoreCase(searchTerm).or(user.lastName.contains(searchTerm));
        QStudent student = new QStudent("student");
        student.user.eq(user);
        return QProject.project.projectParticipants.contains(student);

    //java.lang.IllegalArgumentException: Undeclared path 'student'. Add this path as a source to the query to be able to reference it.
}

Projectで設定されたprojectParticipantsに注釈を付けてみました

@QueryInit("*.*")

しかし、それは同じ例外を与えます。ヒントはありますか?

4

1 に答える 1

2

@TimoWestkämper @siebZ0r

ご清聴ありがとうございました。返信が遅くなり、質問の表現が間違っていて申し訳ありません。実際に私がやりたかったことは、動作する BooleanExpression を書くことでした。

すでに作成された注釈と組み合わせて、これが私が求めていたものでした:

private BooleanExpression authorsFirstNameContains(String searchTerm){
    return QProject.project.projectParticipants.any().user.firstName.containsIgnoreCase(searchTerm);
}

私は同僚の助けを借りてこれを正しくしました。

于 2012-06-04T02:46:08.407 に答える