当前位置: 首页 > 知识库问答 >
问题:

使用EmbeddedIdHibernate条件

柯正谊
2023-03-14

我有我的实体:

@Entity
@Table(name="performances")
@AssociationOverrides({
    @AssociationOverride(name="id.player", joinColumns=@JoinColumn(name="player_id")),
    @AssociationOverride(name="id.season", joinColumns=@JoinColumn(name="season_id"))
})
public class Performance extends AbstractEntity<PerformanceID> {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    @Getter @Setter
    private PerformanceID id;
    @Getter @Setter
    private int goals;

    public Player getPlayer(){
        return id.getPlayer();
    }

    public Season getSeason(){
        return id.getSeason();
    }

和:

@Embeddable
public class PerformanceID implements Serializable {

    private static final long serialVersionUID = 1L;

    @ManyToOne(fetch=FetchType.LAZY, targetEntity=Player.class)
    @JoinColumn(name="player_id")
    @Getter @Setter
    private Player player;
    @ManyToOne(fetch=FetchType.LAZY, targetEntity=Season.class)
    @JoinColumn(name="season_id")
    @Getter @Setter
    private Season season;
Query query = getSession().createQuery("from Performance where id.player.name = 'Claudio'");
return query.list();
Criteria criteria = getSession().createCriteria(Performance.class);
criteria.add(Restrictions.ilike("id.player.name", "Claudio"));
return criteria.list();
Criteria criteria = createCriteria();
criteria.createAlias("id.player", "player");
criteria.add(Restrictions.ilike("player.name", "Claudio"));
return criteria.list();

Hibernate:this_.player_id选为player2_1_0_,this_.season_id选为season3_1_0_,this_.goals选为goals1_0_?

但它将失败,并出现SQLGrammarException:“Missing FROM clause for table player1_”

共有1个答案

李联
2023-03-14

您的映射不正确。EmbeddableId类应该包含@id(因此Serializable)值,而不是映射或复杂类型。您应该将映射移动到实体类中,然后只在embbedableid类中包含它们的ID。请参阅以下示例(来自JPA2.2规范)

@Embeddable
public class DependentId {
    String name;
    long empPK;   // corresponds to PK type of Employee
}

@Entity
public class Dependent {
    @EmbeddedId DependentId id;

    // id attribute mapped by join column default
    @MapsId("empPK") // maps empPK attribute of embedded id
    @ManyToOne Employee emp;
}
 类似资料:
  • 需要使用Elasticsearch 0.20.2及以上的版本

  • 使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支。条件表达式可以是比较变量的值,或是比较变量和常量的值。 示例 下面的例子,判断$(CC)变量是否“gcc”,如果是的话,则使用GNU函数编译目标。 libs_for_gcc = -lgnu normal_libs = foo: $(objects) ifeq ($(CC),gcc) $(CC) -o foo $(objects

  • 使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支。条件表达式可以是比较变量的值, 或是比较变量和常量的值。 示例 下面的例子,判断 $(CC) 变量是否 gcc ,如果是的话,则使用GNU函数编译目标。 libs_for_gcc = -lgnu normal_libs = foo: $(objects) ifeq ($(CC),gcc) $(CC) -o foo $(o

  • 问题内容: 我有两个这样的表,两个都是单独的表 另一个表包含以下结构 我需要从表II中选择AccountNo或TempAccountNo,Mycolumn,条件是 我需要选择 我需要选择 我该如何实现。 问题答案:

  • 问题内容: 看来我在 条件查询 方面遇到了很大的问题。 我必须做一个 有条件的更新 。我在这里写下我想做的事: 显然,这是行不通的。 任何的想法? 问题答案: 支持声明。 或者你也可以使用

  • 问题内容: 如何将sql查询写入hibernate条件? 问题答案: 想我找到了答案。您必须使用Projection.sqlProjection()而不是Projections.sum()。例: