有没有办法在Spring JPARepository中使用查询来填充非列成员?

我有以下结构。

@MappedSuperclass
public abstract class Action {
...
}

我有以下结构:有几个实体扩展了Action,例如……。

@Entity(name="chemistry")
public class Chemistry extends Action implements Serializable {
...
}

为了执行持久化,我使用了JPARepository。

@NoRepositoryBean
public interface ActionRepository<T extends Action> extends JpaRepository<T, String> {
...
}

和一个子实体的接口。

@Component 
@Service
@Repository
interface ChemistryRepository extends ActionRepository<Chemistry> {
}

所有从Action继承的实体的持久化机制都能正常工作。现在我有一个问题。我在DB中还有一个表,叫做’action_params’,包括额外的键值参数,这些参数与一个特定的动作有关(例如化学)。

@Entity(name="action_params")
public class ActionParams implements Serializable {
...
}

在DB中,我不能使用外键,因为该键与特定的表无关,但任何表都继承自Action。这是好的,我想使用一个查询,以便为每个Action从表action_params中获取记录,基于它的id。

我想给Action添加一个List,将这些记录映射成一个列表。我试过使用hibernate,但任何查询都返回空值(下面的代码被添加到Action类中)。

@OneToMany
@JoinFormula(value="select p from action_params p where p.action_id = id")
@Transient
protected List<ActionParams>  actionParamsList;

这是不工作的. 我也试过将ActionParamsRepository自动加载到Action中,但当然没有办法做到,我也想不出其他办法。

非常感谢您的建议

解决方案:

你有什么强烈的理由使用JPA关系?

如果没有这样的理由,我建议你在ActionParams仓库中实现一个新的finder方法。就像这样。

@Query("select p from action_params p where p.action_id = :actionId")
List<ActionParams> findAllByActionId(@Param("actionId") Long actionId )

我想类型是Long 如果你有其他类型,就替换它。

给TA打赏
共{{data.count}}人
人已打赏
解决方案

这是我的nodemailer程序,即使我给错误的邮件在TO地址也显示消息发送如何纠正。

2022-4-20 10:09:16

解决方案

MS Graph API - 创建在线会议,不生成拨号会议信息。

2022-4-20 11:08:41

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索