JPA - 检查另一个表中是否存在值为布尔值

时间:2015-08-24 15:32:58

标签: java hibernate jpa

我有一个(缩写)类,如下所示:

@Entity
@Table
@SecondaryTable(
        name = "SUPER_ADMIN",
        pkJoinColumns = @PrimaryKeyJoinColumn(
                name = "PERSON_ID",
                referencedColumnName = "PERSON_ID"))
public class Person {
  @Id
  @Column(name = "PERSON_ID")
  private Long personId;

  // getters/setters omitted for brevity
}

SUPER_ADMIN表只有一列:PERSON_ID。我想要做的是将private Boolean superAdmin添加到Person,如果该表中存在true,则PERSON_ID将会@SecondaryTable

这甚至可能吗?我使用Hibernate作为我的JPA提供商,所以我也对专有解决方案持开放态度。

更新

好像我应该做更多的功课。在探讨之后,我发现<?php echo form_open('site/create'); ?> <p> <label for="title">Title</label> <input type="text" name="title" id="title" /> </p> <p> <label for="content">Content</label> <input type="text" name="content" id="content" /> </p> <p> <input type="submit" value="submit" /> </p> <?php echo form_close();?> 内部加入而不是外部加入。因此,我的想法根本不起作用。感谢@Elbek的回答 - 它让我得到了这个启示。

2 个答案:

答案 0 :(得分:1)

您可以使用JPA回调方法。

public class Person {
  @Id
  @Column(name = "PERSON_ID")
  private Long personId;

  @Transient
  private transient Boolean superAdmin = false;

  // This method will be called automatically when object is loaded
  @PostLoad
  void onPostLoad() { 
    // BTW, personId has to be present in the table since it is id column. Do you want to check if it is 1?
    superAdmin  =  personId == 1;  
  }
}

或者你可以创建简单的getter方法。

public class Person {
  @Id
  @Column(name = "PERSON_ID")
  private Long personId;

  boolean isSuperAdmin() { 
      return  personId == 1;
  }
}

答案 1 :(得分:1)

@SecondaryTable 之间存在可选关系。在这种情况下,除了使用 @OneToOne 可选关系之外别无选择。