Hello

I've two JPA-Entities (OpenJPA 2.2.0): Task and TaskState.
TaskState have a foreign key on Task. Therefore I marked the relation 
TaskState.getTask() as Lazy. The relation opposite Task.getTaskState() is Lazy 
too (Default for OneToMany). So when I write a JPQL like that in an EJB both 
relations are filled: 
SELECT t FROM Task t LEFT JOIN FETCH t.TaskState

With that query both relations are filled. But the relation TaskState.getTask() 
should be lazy and not filled. The problem is, that that query 
result-list-object is very big, because of the bi-directional: Task have x 
TaksState -> TaskState have the Task -> Task have x TaksState -> and so one. 

Is there a way, to prevent the loading/filling of TaskState.getTask()?

Would be great, if someone could help me.


@Entity
public class Task implements Serializable
{

    private static final long serialVersionUID = 1L;

    public Task()
    {}

        // ...
        
        private List<TaskState> TaskState;

    @OneToMany(mappedBy = "task")
    public List<TaskState> getTaskState()
    {
        return TaskState;
    }

    public void setTaskState(final List<TaskState> TaskState)
    {
        this.TaskState = TaskState;
    }   
}


@Entity
public class TaskState implements Serializable, Comparable<TaskState>
{
    private static final long serialVersionUID = 1L;

    public TaskState()
    {}
        
    private Task task;

    @ManyToOne(fetch = FetchType.LAZY)
    @javax.persistence.JoinColumn(name = "state_task_Id", referencedColumnName 
= "task_Id", nullable = false)
    public Task getTask()
    {
        return task;
    }

    public void setTask(final Task task)
    {
        this.task = task;
    }   
}



// EJB
    public Collection<Task> findAllTasks() throws BBException
    {
        try
        {
            Query query = em.createQuery("SELECT t FROM Task t LEFT JOIN FETCH 
t.TaskState");
                        Collection<Task> tasks = query.getResultList();
                        return tasks;
                        // Why are the tasks on TaskState.getTaskState() are 
also filled with Tasks-Objects?
        }
        catch (Exception ex)
                {
                        throw new BBException(ex);
                }
        }                       

Reply via email to