Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring实体继承,使用findOne时从存储库获取null_Java_Spring Mvc_Jpa_Inheritance_Spring Data Jpa - Fatal编程技术网

Java Spring实体继承,使用findOne时从存储库获取null

Java Spring实体继承,使用findOne时从存储库获取null,java,spring-mvc,jpa,inheritance,spring-data-jpa,Java,Spring Mvc,Jpa,Inheritance,Spring Data Jpa,在spring,JPA中,我想将我的用户模型扩展到更多的用户类型。 我喜欢它在一张桌子上 我相信我的示例是正确的,但是对于findOne方法,我得到了null 你能帮我的忙吗?我不知道怎么了 以下是我的代码(我有更多的用户类型,但基本类型不起作用): 用户: @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="user_type") public abstract cla

在spring,JPA中,我想将我的用户模型扩展到更多的用户类型。 我喜欢它在一张桌子上

我相信我的示例是正确的,但是对于
findOne
方法,我得到了
null

你能帮我的忙吗?我不知道怎么了

以下是我的代码(我有更多的用户类型,但基本类型不起作用):

用户:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="user_type")
public abstract class User {
    public LicenseType license = LicenseType.FREE;
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Long id;

    public String username;
    public String password;

    @OneToOne(fetch = FetchType.LAZY)
    public Country country;

    @OneToOne(fetch = FetchType.LAZY)
    public UserPhoto profilePhoto;
    .... 
    ....
}
@Entity
@DiscriminatorValue("UserBasic")
public class UserBasic extends User {

}
UserBasic

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="user_type")
public abstract class User {
    public LicenseType license = LicenseType.FREE;
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Long id;

    public String username;
    public String password;

    @OneToOne(fetch = FetchType.LAZY)
    public Country country;

    @OneToOne(fetch = FetchType.LAZY)
    public UserPhoto profilePhoto;
    .... 
    ....
}
@Entity
@DiscriminatorValue("UserBasic")
public class UserBasic extends User {

}
UserRepository

@NoRepositoryBean
public interface UserRepository<T extends User> extends Repository<T, Long>{
    T findOne(Long id);
    T findByFacebookId(Long facebookId);
}
public interface UserBasicRepository extends UserRepository<UserBasic>{
    @Modifying
    @Query(value="UPDATE User SET someField = now() WHERE id = ?1", nativeQuery= true)
    long updateSomeField(Long userId);
}

问题更新 现在在评论之后,我打印了查询,我想我看到了问题所在

and userbasic0_.user_type='UserBasic'
我只是想要继承,没有要求额外的评论。我如何才能消除这种情况

Hibernate: 
select
    userbasic0_.id as id2_8_0_,
    userbasic0_.password as passwor12_8_0_,
    userbasic0_.username as usernam15_8_0_,
    .....
from
    User userbasic0_ 
where
    userbasic0_.id=? 
    and userbasic0_.user_type='UserBasic'

您是如何保存用户的?数据库包含什么?你要通过哪个身份证。因为最明显的解释是这个用户根本不存在。你的评论确实有帮助,并说明了问题所在。更新问题好吧,你要求的是一个UserBasic。如果不使用鉴别器,hibernate怎么知道一行是UserBasic、UserFancy还是超级用户?这就是它的用途。我希望UserBasic只选择X列,而UserWithSuperPower可以选择所有列。有时我想要ID=100的UserBasic,有时我想要用ID=100的超级权限更新UserBasic。我只是希望select在剩下的时间里获得更少的非UserWithSuperPowerSpace的列,这不是实体继承的目的。实体继承允许在数据库中存储一只狗(ID=1)和一只猫(ID=2),然后通过ID=1查找动物并取回狗,通过ID=2查找动物并取回猫。您所寻找的是延迟加载属性,或者查询只选择少数属性而不是全部属性,或者JPA fetch组。你要做的是把狗存起来,然后希望它能像猫一样回来。这在设计上是不可能的。因为猫不是狗。