Reputation: 41
I have the following database scheme (kept only the relevant tables):
I need to map organization_internet_domain_categorized into application_organization, but the column internet_domain_id belongs to the table application.
What I've tried:
@Entity
@Table(name = "application_organization")
@NoArgsConstructor
@Data
@EqualsAndHashCode(of = "id")
public class OrganizationApplication implements Serializable {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "organization_id", referencedColumnName = "organization_id", insertable = false, updatable = false),
@JoinColumn(name = "application.internet_domain_id", referencedColumnName = "internet_domain_id", insertable = false, updatable = false)
})
private InternetDomainCategory internetDomainCategory;
@ManyToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "application_id", foreignKey = @ForeignKey(name = "fk_application_organization_application"))
private Application application;
// kept only the mapping part
}
What JPA/Hibernate generates:
select
organizati0_.id as id1_3_0_,
-- removed all the columns to keep only the relevant parts
from
application_organization organizati0_
left outer join organization_internet_domain_categorized internetdo1_ on
organizati0_.application.internet_domain_id = internetdo1_.internet_domain_id
and organizati0_.organization_id = internetdo1_.organization_id
left outer join internet_domain internetdo2_ on
internetdo1_.internet_domain_id = internetdo2_.id
left outer join Organization organizati3_ on
internetdo1_.organization_id = organizati3_.id
where
organizati0_.id =?
organizati0_.application.internet_domain_id is not a valid reference.
Upvotes: 0
Views: 687
Reputation: 16400
The mapping
@JoinColumns({
@JoinColumn(name = "organization_id", referencedColumnName = "organization_id", insertable = false, updatable = false),
@JoinColumn(name = "application.internet_domain_id", referencedColumnName = "internet_domain_id", insertable = false, updatable = false)
})
private InternetDomainCategory internetDomainCategory;
is invalid. You can not refer to other tables in the join columns annotation.
It's also unnecessary to do so, as you can access this InternetDomainCategory
by using application.getInternetDomainCategory()
.
Upvotes: 0