2012-12-15 152 views
0

我有以下注釋查詢父類總是返回一個空集

@PersistenceCapable(table = "my_parent_table", objectIdClass = Myclass.PK.class, detachable = "true", identityType = IdentityType.APPLICATION) 
@Inheritance(strategy = InheritanceStrategy.NEW_TABLE) 
@Discriminator(strategy = DiscriminatorStrategy.VALUE_MAP, column = "discriminator", value = "0") 

父類現在我所有的子類有以下標註,除了value屬性爲@Discriminator註釋,當然變化以及@PersistanceCapable註釋的table屬性除外。

@PersistenceCapable(detachable = "true", table = "my_table") 
@Inheritance(strategy = InheritanceStrategy.NEW_TABLE) 
@Discriminator(value = "1") 

並通過一個DAO類,與@Persistence註釋,我使用下面的方法的PoC

public List<MyParentClass> test() { 
     PersistenceManager pm = null; 
     try { 
      pm = getPM(); 
      Query q = pm.newQuery(MyParentClass.class); 
      return (List<MyParentClass>) q.execute(); 
     } catch (Exception e) { 
      log.error(e.getMessage(), e); 
      return null; 
     } finally { 
      pm.close(); 
     } 
    } 
+1

我確定「始終查詢父類」會執行一些在日誌中可見的SQL。 – DataNucleus

+0

@DataNucleus,謝謝。 –

回答

0

我查了日誌,DataNucleus在他的評論暗示。我不應該爲父類使用@Discriminator

我不確定我是否可以使用@Discriminator作爲子類,但我想出了一種方法來完全刪除整個層次結構,因此不同類的不同記錄根據本質進行區分。