/* * Copyright (c) 2010-2013 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.evolveum.midpoint.repo.sql.data.common; import com.evolveum.midpoint.repo.sql.data.common.id.ROrgClosureId; import com.evolveum.midpoint.repo.sql.query2.definition.NotQueryable; import com.evolveum.midpoint.repo.sql.util.RUtil; import org.hibernate.annotations.ForeignKey; import org.hibernate.annotations.Index; import javax.persistence.*; import java.io.Serializable; /** * @author lazyman */ @IdClass(ROrgClosureId.class) @Entity @Table(name = "m_org_closure") @org.hibernate.annotations.Table(appliesTo = "m_org_closure", indexes = {@Index(name = "iDescendant", columnNames = {"descendant_oid"}), @Index(name = "iDescendantAncestor", columnNames = {"descendant_oid", "ancestor_oid"})}) @NotQueryable public class ROrgClosure implements Serializable { private RObject ancestor; private String ancestorOid; private RObject descendant; private String descendantOid; private int val; public ROrgClosure() { } public ROrgClosure(String ancestorOid, String descendantOid, int val) { if (ancestorOid != null) { this.ancestorOid = ancestorOid; } if (descendantOid != null) { this.descendantOid = descendantOid; } this.val = val; } public ROrgClosure(RObject ancestor, RObject descendant, int val) { this.ancestor = ancestor; this.descendant = descendant; this.val = val; } @MapsId("ancestorOid") @ManyToOne(fetch = FetchType.LAZY, optional = true) @JoinColumns({@JoinColumn(name = "ancestor_oid", referencedColumnName = "oid")}) @ForeignKey(name = "fk_ancestor") @NotQueryable public RObject getAncestor() { return ancestor; } @Id @Index(name = "iAncestor") @Column(name = "ancestor_oid", length = RUtil.COLUMN_LENGTH_OID, insertable = false, updatable = false) @NotQueryable public String getAncestorOid() { if (ancestorOid == null && ancestor.getOid() != null) { ancestorOid = ancestor.getOid(); } return ancestorOid; } public void setAncestor(RObject ancestor) { this.ancestor = ancestor; } @MapsId("descendantOid") @ManyToOne(fetch = FetchType.LAZY, optional = true) @JoinColumns({@JoinColumn(name = "descendant_oid", referencedColumnName = "oid")}) @ForeignKey(name = "fk_descendant") @NotQueryable public RObject getDescendant() { return descendant; } @Id @Index(name = "iDescendant") @Column(name = "descendant_oid", length = RUtil.COLUMN_LENGTH_OID, insertable = false, updatable = false) @NotQueryable public String getDescendantOid() { if (descendantOid == null && descendant.getOid() != null) { descendantOid = descendant.getOid(); } return descendantOid; } public void setDescendant(RObject descendant) { this.descendant = descendant; } public void setAncestorOid(String ancestorOid) { this.ancestorOid = ancestorOid; } public void setDescendantOid(String descendantOid) { this.descendantOid = descendantOid; } @Id @Column(name = "val") public int getVal() { return val; } public void setVal(int val) { this.val = val; } @Override public int hashCode() { return super.hashCode(); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; ROrgClosure that = (ROrgClosure) obj; if (ancestor != null ? !ancestor.equals(that.ancestor) : that.ancestor != null) return false; if (descendant != null ? !descendant.equals(that.descendant) : that.descendant != null) return false; return true; } @Override public String toString() { return "ROrgClosure{a='" + ancestorOid + "', d='" + descendantOid + "', val=" + val + "}"; } }