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

Ebean的例外OneTo很多

苗森
2023-03-14

在Play2.0.2中使用Ebean我有两个这样的模型:

@Entity
@Table(name="GRP_MST")
public class GroupMst extends Model {

@Id
@Constraints.Required
@Formats.NonEmpty
public String groupid;
......
@OneToMany(cascade = CascadeType.ALL)
public List<DtlMenuGrp> dtlMenuGrpList; // This one is giving problems 

}

我的DtlMenuGrp模型看起来像:

@Entity
@Table(name="DTL_MENU_GRP")
public class DtlMenuGrp extends Model {

@Constraints.Required
@Formats.NonEmpty
public String groupid;
....
}

我想加入上述两个模型,以便在我的控制器中:

GroupMst groupMst = GroupMst.find.where().eq("groupid",data.get("grpid")).findUnique();
List<DtlMenuGrp> dtlMenuGrpList = groupMst.dtlMenuGrpList;

但这给我下面的例外列没有找到:

Caused by: javax.persistence.PersistenceException: Query threw SQLException:Invalid column name 'group_mst_groupid'. 
Bind values:[1000] 
Query was:
select t0.groupid c0
        , t1.groupid c1, t1.rightid c2, t1.status c3, t1.createdby c4, t1.createdon c5 
from GRP_MST t0
left outer join DTL_MENU_GRP t1 on t1.group_mst_groupid = t0.groupid  
where t0.groupid = ?   
order by t0.groupid 

为什么我的列被转换为group\u mst\u groupid而不是groupid

共有1个答案

谭泳
2023-03-14

它不能被转换为gruopid,因为你的DtlMenuGrp也包含这样的字段(你没忘记@id注释吗?)

有一些规则,在这些规则上,Ebean为关联创建字段键,并且group_mst_groupid适合于它,因为它是模型名称和它的@Id字段的组合。我刚刚测试了它如何用你给出的模型定义生成1.sql,它创建了如下所示:

create table DTL_MENU_GRP (
group_mst_groupid         varchar(255) not null,
groupid                   varchar(255))
;

更重要的是,我没有任何错误。

我的建议是,尽量更改模型名称,以避免在名称中使用神秘的缩写,始终尝试为模型和字段找到尽可能短的单个单词。尽量避免用注释覆盖表名,直到真正需要它。然后,您将能够更快地找到错误,如果需要手动修复它们...

即,改为GroupMst(表GRP\u MST)使用id字段创建一个组模型

@Entity
public class Group extends Model {

  @Id
  public Long id; //why not a numeric id? for an example Long ?

  @OneToMany(cascade = CascadeType.ALL)
  public List<Menu> menus;
  // ...


}

只是猜测。。。

@Entity
public class Menu extends Model {

  @Id
  public Long id;
  // ...

}

然后,使用Ebean从头开始生成整个DDL,您会惊讶于它是多么简单和合乎逻辑。。。

 类似资料:
  • 我对Spring数据Rest与Spring数据JPA一起使用有一个问题。我使用的是Spring boot 1.4.4。释放 我的rest spring数据存储库在这里: 这里没有显示我的setters和bregetter。 轮廓爪哇: 属性JAVA “上的帖子”http://localhost:8880/profiles“要创建实体: 这是我击球时的结果http://localhost:8880/

  • 我有一个Post实体,它有一个TestAttribute类型属性,其代码如下: 我尝试在传递一个RawSql(其中我还获得了其他属性)之后获取属性testAttribute,如下代码所示 我的问题是,当我使用Ebean返回查询结果时。json()。tojson(),则不会返回TestAttribute属性。这是返回的结果: 注意,当我使用json时。toJson()返回结果,但返回的实体属性可以使

  • 我在Hibernate状态下使用关系时得到空。这是我的代码用户实体 登录历史实体 要获取登录历史详细信息,请执行以下操作: 我得到一张空名单。请帮忙

  • Ebean是一个使用纯Java实现的开源ORM框架。  Bean使用JPA注释(@entity,  @OneToMany等Java注释)对实体进行映射。Ebean力求让使用最简单的API帮助开发者从数据库获取有用的数据信息。 Ebean是一个对象/关系映射持久层框架。它与EJB3相类似,但该框架简单易于学习和使用。 主要特点: 1.兼容EJB3 ORM映射 2.支持级联保存和删除 3.支持懒加载

  • 超简单、超强大的 ORM 框架,包含 OQL、SQL、ES 多查询引擎,超越 JPA、Hibernate、Mybatis。 支持的一些特性 对标准Entity支持完整CRUD操作,包括常用的查询操作 支持通过接口中的注解生成对应的查询(orm查询、sql查询、命名orm查询、命名sql查询、dto查询) 支持通过接口中的方法名生成对应的查询 支持QueryChannel服务 提供基础属性的实体基类

  • 我有一个OneTo多项关系,我可以插入记录,但不能删除它们,当我试图删除它时,它会遇到“外键约束失败”错误。我使用级联删除孤儿如下,但不工作还。 父类的成员具有以下getter 成员类的父类具有以下getter 我也使用了下面的注释,但不起作用 我的冬眠依赖如下 我删除信息的代码