我想添加一個嵌入式關係到一個實體類。JPA,可嵌入類
在我的數據庫中,我有表protein
:
+-------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+------------------+------+-----+---------+----------------+
| PID | int(11) unsigned | NO | PRI | NULL | auto_increment |
| uniprot_UniprotAC | char(6) | YES | MUL | NULL | |
| comment | int(11) unsigned | YES | MUL | NULL | |
+-------------------+------------------+------+-----+---------+----------------+
和表benchmark
:
+-----------------+--------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------------------------+------+-----+---------+-------+
| ba_type | varchar(255) | YES | | NULL | |
| target | int(11) unsigned | NO | MUL | NULL | |
| rec_diluation | varchar(255) | YES | | NULL | |
| comment | text | YES | | NULL | |
+-----------------+--------------------------------+------+-----+---------+-------+
在benchmark
領域的目標是爲protein
表
我已經有一個外鍵一個名爲SupProtein
的實體可以從蛋白質表中正常工作。
現在我想添加一個嵌入關係到Benchmark
類。
這是我的標杆類:
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
@Embeddable
public class Benchmark implements Serializable {
@Column(name="ba_type")
private String type;
@Column(name="comment")
private String comment;
@Column(name="recDilution")
private String recDilution;
public Benchmark(){
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public String getRecDilution() {
return recDilution;
}
public void setRecDilution(String recDilution) {
this.recDilution = recDilution;
}
}
在我entityt類SupProtein
我補充一下:
@Embedded
private Benchmark benchmark;
但是當我嘗試建立我得到以下錯誤:
Internal Exception: Exception [EclipseLink-7246] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.ValidationException
Exception Description: The Entity class [class SupEntity.SupProtein] has an embedded attribute [benchmark] of type [class Benchmark] which is NOT an Embeddable class. Probable reason: missing @Embeddable or missing <embeddable> in orm.xml if metadata-complete = true
我還沒有創建任何ORM.xml文件,並找不到任何地方。我需要一個orm.xml文件來創建可嵌入的關係,或者可能是我的問題?
你可能不使用你認爲你正在使用的Benchmark類的基數。但Embeddable不適合使用。您應該有一個OneToOne關聯。基準測試的領域並不像蛋白質的領域那樣嵌入在同一個表格中。 –
我真的可以使用OneToOne關聯嗎,這並不意味着我必須將基準作爲實體嗎?並且實體不必擁有一個id,並且與實體相對應的表必須具有主鍵? (基準表沒有)基準表的字段與蛋白質字段沒有嵌入在同一張表中。你是什麼意思? – numfar