【问题标题】:Mapping two classes on Single Table在单表上映射两个类
【发布时间】:2012-05-03 07:08:01
【问题描述】:

让我有桌子

用户
-id : long
-登录:varchar
-武器:varchar
-magic: varchar

我想将此表映射到两个类(使用 Hibernate/JPA)

class Mag  
{   
   long id;  
   String login;  
   String weapon;  
}  

class Warrior  
{  
   long id;  
   String login;  
   String magic;  
}  

如果我发送 HQL 查询:SELECT m FROM Mag m WHERE m.login = ? 然后我得到 Mag 实例
如果我发送 HQL 查询:SELECT w FROM Warrior w WHERE w.login = ? 然后我得到 Warrior 实例
我试着做这样的东西

@Entity  
@Table(name = "User")  
class User   
{  
   long id;  
   String login;  
}  

@Entity  
class Mag extends User  
{  
   String magic;  
}  

@Entity  
class Warrior extends User   
{  
   String weapon;  
}   

但是@Inheritance 需要鉴别器列,但我没有鉴别器。

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    您正在寻找MappedSuperClass,它允许子类从超类继承注释而不需要鉴别器。

    【讨论】:

      【解决方案2】:

      如果您有一个分隔符列,您可以为此使用鉴别器。假设您的分隔符列是

      utype char(1)

      如果

      utype = m,即是一个Mag实体和

      utype=w,即战士实体

      请在下面找到代码。

      @Entity
      @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
      @DiscriminatorColumn(name = "utype", discriminatorType =  DiscriminatorType.CHAR)
      @Table(name = "User")  
      class User   
      {  
         long id;  
         String login;  
      }  
      
      @Entity
      @DiscriminatorValue("m")  
      class Mag extends User  
      {  
         String magic;  
      }  
      
      @Entity  
      @DiscriminatorValue("w")  
      class Warrior extends User   
      {  
         String weapon;  
      }  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-01
        • 2016-05-13
        • 2012-02-06
        • 2022-01-23
        • 1970-01-01
        • 2010-12-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多