Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » EclipseLink » Trouble converting SQL into JPQL with OUTER JOIN
icon5.gif  Trouble converting SQL into JPQL with OUTER JOIN [message #634733] Fri, 22 October 2010 17:00 Go to previous message
Fericit Bostan is currently offline Fericit Bostan
Messages: 68
Registered: June 2010
Member
I'm using EclipseLink 2.1.1 on GlassFish 3.0.1. I'm having a hard time converting a SQL query into JPQL. The SQL works as expected. I guess the thing I'm struggling with is that I'm using a JoinTable on one of my objects that is not represented by an entity.

Below you will find my Entities that are involved in the SQL and the working SQL that returns the correct values.

Any help you can provide me with is greatly appreciated. Thank you for your effort.

Organization Entity:
@Entity
@Table(name = "Organization")
public class Organization implements Serializable {

	@Id
	@Column(name = "OrganizationId", nullable = false)
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;

	@Column(name = "Name", nullable = false, length = 128)
	private String name;

	@Column(name = "Level", nullable = false)
	private int level;

	@Column(name = "Alias", nullable = false, length = 50)
	private String alias;

	@JoinTable(name = "OrganizationAncestry", 
			joinColumns = { 
				@JoinColumn(name = "Ancestor", referencedColumnName = "OrganizationId", nullable = false) 
			}, 
			inverseJoinColumns = { 
				@JoinColumn(name = "Descendent", referencedColumnName = "OrganizationId", nullable = false) 
			})
	@ManyToMany(fetch = FetchType.EAGER)
	private Collection<Organization> descendents;

	@ManyToMany(mappedBy = "descendents", fetch = FetchType.EAGER)
	private Collection<Organization> ancestors;



DocumentType entity:
@Entity
@Table(name = "DocumentType")
public class DocumentType implements Serializable {

	@Id
  @Column(name = "DocumentTypeID", nullable = false)
	@GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer id;

  @Column(name = "TypeName", nullable = false, length = 40)
  private String name;

  @Column(name = "Alias", nullable = false, length = 40)
  private String alias;

  @Column(name = "Description", length = 256)
  private String description;

  @Column(name = "IsActive", nullable = false)
  private boolean active;
        
	@JoinColumn(name = "OrganizationID", referencedColumnName = "OrganizationID")
	@ManyToOne(fetch = FetchType.LAZY)
	private Organization organization;
	
}



My SQL:

SELECT
	t1.* 
FROM
    DocumentType AS t1 
JOIN
    OrganizationAncestry AS t2 
ON 
    t1.OrganizationId = t2.Ancestor 
JOIN 
	Organization AS t3 
ON 
    t3.OrganizationId = t2.Descendent
LEFT OUTER JOIN (
            OrganizationAncestry AS t4 
		JOIN 
            Organization AS t5 
		ON 
            t4.Descendent = t5.OrganizationId 
		JOIN 
            DocumentType AS t6 
		ON 
            t5.OrganizationId = t6.OrganizationId 
    ) 
ON 
    t2.Ancestor = t4.Ancestor 
AND
	t4.Ancestor <> t4.Descendent 
AND
	t1.Alias = t6.Alias 
WHERE
    t1.IsActive = 1
AND
	t3.Alias = 'IWT' 
AND
	t6.Alias IS NULL

[Updated on: Fri, 22 October 2010 18:37]

Report message to a moderator

 
Read Message icon5.gif
Read Message
Read Message
Read Message
Read Message
Previous Topic:Possible bug retrieving single Boolean column
Next Topic:connecting an application to two different JNDI datasources
Goto Forum:
  


Current Time: Sat May 25 08:27:44 EDT 2013

Powered by FUDForum. Page generated in 0.10702 seconds