我有一个(缩写)类,如下所示:
@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的回答 - 它让我得到了这个启示。
答案 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 可选关系之外别无选择。