Объединить 2 сущности с колонкой, отличной от PK и FK - PullRequest
0 голосов
/ 09 апреля 2019

В настоящее время я работаю над сопоставлением сущностей и задаюсь вопросом, есть ли способы сопоставления @OneToMany без использования первичного ключа. Для всех сопоставлений требуется первичный ключ по крайней мере для одного сопоставляемого объекта.

т.д .: У меня 2 таблицы

Table 1
ID(PK),
Name,
Xid

Table 2
ID(PK),
UserName,
userType,
Xid

Я не хочу выступать, например:

@OnetoMany(mapped by="")
public Table2 t2

@ManyToOne()
public Table1 id;

Есть ли способ сопоставить / связать Xid из Table1 с Xid из Table2, используя @JoinTable?

1 Ответ

0 голосов
/ 09 апреля 2019

Да, вы можете сопоставить отношения с первичным ключом и внешним ключом.

Таблица 1:

@Entity
@Table(name = "Table1")
public class Table1 implements Serializable,Cloneable {

  @Id
  @Column(name = "id")
  private BigInteger id;     

  @Column(name = "Name")
  private String name; 

  @Column(name = "Xid")
  private BigInteger xid;

  @OneToOne
  @JoinColumn(name = "Xid", nullable = false, insertable = false, updatable = false, referencedColumnName = "Xid")
  private Table2 table2;

// Getter and Setters
}

Таблица 2:

@Entity
@Table(name = "Table2")
public class Table2 implements Serializable , Cloneable {

  public Table2() {
  }

  @Column(name = "id")
  private BigInteger id;

  @Column(name = "Xid")
  private BigInteger xid;

  @Column(name = "UserName")
  private String userName;

  @Column(name = "userType")
  private String userType;
// Getter and Setters    

}

А в Query вы укажете Join like

    CriteriaBuilder cb = session.getCriteriaBuilder();
    CriteriaQuery<Table1> cq = cb.createQuery(Table1.class);
    Root<Table1> root = cq.from(Table1.class);
    Join<Table1, Table2> join = (Join<Table1, Table2>) root
            .fetch(Table1_.table2);
    List<Predicate> conditions = new ArrayList<>();
    conditions.add(cb.equal(root.get(Table1_.Xid), join.get(
        Table2_.Xid)));
    cq.where(conditions.toArray(new Predicate[]{}));
    Query query= session.createQuery(cq);
...