Spring boot 如何使用鉴别器列值获取Hibernate继承类型SingleTable的整行?

Spring boot 如何使用鉴别器列值获取Hibernate继承类型SingleTable的整行?,spring-boot,hibernate,Spring Boot,Hibernate,我有一个父类Electronics和子类Camera和Mobile。我使用Hibernate继承单表类型。我想获取所有电子产品及其产品类型,但在获取时,我无法获取产品类型,这也是鉴别器列。这是我第一个使用springboot和hibernate的项目。任何帮助都将不胜感激 电子类 @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @Table(name = "electronics") @Discrim

我有一个父类Electronics和子类Camera和Mobile。我使用Hibernate继承单表类型。我想获取所有电子产品及其产品类型,但在获取时,我无法获取产品类型,这也是鉴别器列。这是我第一个使用springboot和hibernate的项目。任何帮助都将不胜感激

电子类

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = "electronics")
@DiscriminatorColumn(name = "product_Type", discriminatorType = DiscriminatorType.STRING)
public class Electronics {

    @Id
    @GenericGenerator(name = "CamIdGenerator", strategy = "com.virtusa.neuralhack.vlx.IdGenerator.CameraIdGenerator")
    @GeneratedValue(generator = "CamIdGenerator")
    @Column(name = "product_id")
    private String productId;
    
    private String askingPrice;

    @Column(name = "age")
    private String howOld;

    @Column(name = "model")
    private String model;

    @Column(name = "brand")
    private String brand;

    @Column(name = "description")
    private String description;

    transient private String email;
    \\ getters and setter
电子存储库

@Override
    public List<Electronics> getDefaultElectronicProducts() {

        //System.out.println("repo check 1");
        Session currentSession = manager.unwrap(Session.class);
        
        //Query<Electronics> query = currentSession.createQuery("Select * from electronics Order By Rand() Limit 6", Electronics.class);
    
        //System.out.println("repo check 2");
        
        String query = "FROM Electronics ORDER BY RAND()";
        
        Query<Electronics> q =(Query<Electronics>) manager.createQuery(query,Electronics.class);
        
        q.setMaxResults(5);
        
        List<Electronics> defaultProductList = q.getResultList();
        
        //System.out.println("repo check 3");
        
        //System.out.println(defaultProductList.get(1));
        
        return defaultProductList;
    }
@覆盖
公共列表getDefaultElectronicProducts(){
//系统输出打印项次(“回购检查1”);
Session currentSession=manager.unwrap(Session.class);
//Query Query=currentSession.createQuery(“按Rand()限制6从电子产品订单中选择*”,electronics.class);
//系统输出打印项次(“回购检查2”);
String query=“来自兰德电子订单()”;
Query q=(Query)manager.createQuery(Query,Electronics.class);
q、 setMaxResults(5);
List defaultProductList=q.getResultList();
//系统输出打印项次(“回购检查3”);
//System.out.println(defaultProductList.get(1));
返回默认产品列表;
}

我想您已经用包含产品类型值的
@DiscriminatorValue
注释正确地注释了子类了吧?在这种情况下,请检查结果列表中的对象类型。您将看到,根据数据库中的值,您将获得子类的实例。这是您计算类型的方法。我想您也可以在
Electronics
实体中将产品类型建模为
@Column(name=“product_type”,insertable=false,updateable=false)
,但我不建议这样做以避免可能混淆实际值。

Hii@ChristianBeikov,数据库中正确加载了鉴别器值。但我的问题是,在存储库代码中,我获取了电子产品列表,即相机和手机都将出现在其中。我希望获得产品类型以及其他详细信息,但我无法存储产品类型,因为在Electronics类中没有显式定义用于存储此信息的变量。你能帮我吗???有什么问题吗?只需将
@Column(name=“product_Type”,insertable=false,updateable=false)私有字符串productType
添加到您的类中,就可以了。