2013-04-23 20 views
1

我有一些與抽象超類沒有區別的類,所以不需要自己的表。我正在使用Spring Roo。如何處理與抽象超類無關的類,並且不需要表

我有一個任務超類映射到任務表,並使用Inheritance.Joined繼承模型。

import java.math.BigDecimal; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Inheritance; 
import javax.persistence.InheritanceType; 
import javax.persistence.Table; 

privileged aspect Task_Roo_Jpa_Entity { 

declare @type: Task: @Entity; 

declare @type: Task: @Table(schema = "ADMIN_DIRECT", name = "TASK"); 

declare @type: Task: @Inheritance(strategy = InheritanceType.JOINED); 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "ID") 
private BigDecimal Task.id; 

public BigDecimal Task.getId() { 
    return this.id; 
} 

public void Task.setId(BigDecimal id) { 
    this.id = id; 
} 

} 

我有一些子類不從抽象的超類不同,所以並不需要在數據庫中的專用表,而其他人從超不同,所以有專門的表格。

我可以通過在我的子類中執行此操作來獲得持久性,這與抽象類沒有區別。即創建延伸任務的子類,如下面的註釋(注意表名任務實際是超類表):

@Entity 
@Table(schema = "ADMIN_DIRECT", name = "TASK") 

public class ExpensesTask extends Task { 


} 

這依舊在任務父表的實體標有「ExpensesTask」作爲鑑別一個DTYPE列值。

所以它似乎工作,儘管Eclipse是提高的錯誤,指出

ExpensesTask" is mapped, but is not included in any persistence unit ... JPA Problem 

如果我讓袋鼠接替我的工作我的「正確」的子類,那麼持久性似乎走走過場然後默默地失敗(沒有堅持,沒有出現的錯誤):

即這不起作用

@RooJavaBean 
@RooToString 
@RooDbManaged(automaticallyDelete = true) 
@RooJpaActiveRecord(versionField = "", table = "TASK", schema = "ADMIN_DIRECT") 
public class ExpensesTask extends Task { 

} 




import javax.persistence.Entity; 
import javax.persistence.Table; 

privileged aspect ExpensesTask_Roo_Jpa_Entity { 

    declare @type: ExpensesTask: @Entity; 

    declare @type: ExpensesTask: @Table(schema = "ADMIN_DIRECT", name = "TASK");  
} 

很想知道正確的方法來映射此當不需要將子類與抽象超類相區分時,可以使用繼承情況。

我總是可以創建一個只有「ID」字段的「ExpensesTask」表,所以Roo方法與我的其他「帶有表類的子類」一樣,但由於我有一個工作版本一些Eclipse的投訴)我不確定這是否有點「巧克力」。

回答

0

將該表設置爲子類中的超類'表是EclipseLink中執行此操作的當前支持方式,並且可行。 (從技術上說,JPA不允許類在JOINED繼承中沒有表,但是EclipseLink會)。

完成同樣的事情的另一種方法是讓它默認一個表,並使用DescriptorCustomizer清除描述符的表以擺脫它。

+0

謝謝......描述符定製器在這一點上超越了我。那麼你會建議不要使用ID列來創建表格來克服日食投訴? – smackenzie 2013-04-24 21:01:10