无法使用命名查询找到 Singleton EJB 中的私有实体

Private entity in a Singleton EJB can not be found with a named query

我有一个单例 EJB,它在开始时初始化了两个实体:

@Startup
@Singleton
@Lock(LockType.READ)
public class PetShopSingleton {

@Inject
private AnimalRepository animalRepository;

private Animal cat;

private Animal dog;

@PostConstruct
public void init() {

    cat = AnimalRepository.findByType(AnimalType.CAT);

    dog = AnimalRepository.findByType(AnimalType.DOG);
}
}

实体从服务运行 命名查询初始化:

@Stateless
public class AnimalRepository extends BaseRepository {

public Animal findByType(AnimalType type) {
    Map<String, Object> params = new HashMap<>();
    params.put("type", type);

    return findOneByNamedQuery("Animal.findByType", params,
            Animal.class);
}
}

findOneByNamedQuery 是抽象 BaseRepository 中的一个方法 class:

public <T> T findOneByNamedQuery(String queryName, Map<String, Object> parameters, Class<T> clazz) {
        TypedQuery<T> typedQuery = entityManager.createNamedQuery(queryName, clazz);

    applyParameters(parameters, typedQuery);

    List<T> results = typedQuery.getResultList();
    if (!results.isEmpty()) {
        return results.get(0);
    }

    return null;
}

命名查询中使用的可枚举 class 如下所示:

public enum AnimalType {
    CAT,
    DOG;
}

最后是持久实体:

@Entity
@Table(name = "ANIMALS")
@NamedQueries({
    @NamedQuery(
        name = "Animal.findByType",
        query = "select a from Animal a where a.type = :type"
    )
})
public class Animal {

    @Enumerated(EnumType.STRING)
    private AnimalType type;

    public AnimalType getType() {
        return type;
    }

    public void setTyp(AnimalType type) {
        this.type = type;
    }

}

一个实体(猫)是一个较旧的实体,已在数据库中注册,较新的实体(狗)最近已注册。这里的问题是在 init() 函数中调用的用于查找具有命名查询的两个实体的服务只找到了猫。尽管数据库中有一个条目的 TYPE 列等于 DOG,但狗返回 null。

任何人都可以帮助我或告诉我发生这种情况的可能原因吗?

数据库是 Oracle DB。

OK我解决了问题,table中有一栏动物头像的文件路径以C:/path/to/avatar开头,我把它改成了/path/to/avatar它奏效了。仍然不知道为什么会这样,但现在好了:)