创建实体时失败, 检查实体类定义并无异常
你看一下项目依赖的CUBA core,是不是有多个版本?
检查了一下, 没有多个版本, 也试了试从7.1.13换成了7.2.2, 还是报的同样的错误
或者换一种方式, 我如何能在Edit类里调用这个接口并传参, 参数内容是编辑后的一整条数据
你把这个方法提取出来,放到一个Service里面。然后在这个监听器和你的Edit界面都注入这个Service,就可以调用这个方法了。
我换了一种方式, 把方法都写到了Service里, 在界面控制器下的Edit里调用, 还是会报 : com.haulmont.cuba.core.global.Metadata.create(Ljava/lang/Class;)Ljava/lang/Object;, 创建实体错误
如何回到7.1.1版本
你好,用Studio是降不回去的。得手动修改:
ext.cubaVersion = '7.1.1'
然后再把依赖的add-on也降回去:
dependencies {
...
appComponent(...) // 这里找到7.2 以上的组件,都改回 7.1.1
}
针对你的action要打开不同页面的问题,只能用下面的java代码实现,7.1.1 不支持action里面设置screenClass:
假设我们有一个product 实体,在浏览界面 product-browse.xml
中,不需要做任何改动:
<groupTable id="productsTable"
width="100%"
dataContainer="productsDc">
<actions>
<action id="create" type="create"/> <!--要指定界面的新建操作-->
<action id="edit" type="edit"/> <!--要指定界面的编辑操作-->
<action id="remove" type="remove"/>
</actions>
<columns>
<column id="name"/>
</columns>
<rowsCount/>
<buttonsPanel id="buttonsPanel"
alwaysVisible="true">
<button id="createBtn" action="productsTable.create"/>
<button id="editBtn" action="productsTable.edit"/>
<button id="removeBtn" action="productsTable.remove"/>
</buttonsPanel>
</groupTable>
然后在对应的 ProductBrowse.java
中:
// 注入表格,以便后续获取选择的数据。
@Inject
private GroupTable<Product> productsTable;
// 注入ScreenBuilder,用于打开界面。
@Inject
private ScreenBuilders screenBuilders;
// 表格的新建操作
@Subscribe("productsTable.create")
public void onProductsTableCreate(Action.ActionPerformedEvent event) {
screenBuilders.editor(productsTable)
.newEntity() // 新建实体
.withScreenClass(ProductEdit.class) // 这里指定action要打开的编辑页面
.build()
.show();
}
// 表格的编辑操作
@Subscribe("productsTable.edit")
public void onProductsTableEdit(Action.ActionPerformedEvent event) {
if(productsTable.getSingleSelected() == null){
return;
}
screenBuilders.editor(Product.class,this)
.editEntity(productsTable.getSingleSelected()) // 列表中选择的实体
.withScreenClass(ProductEditNew.class) // 指定编辑action要打开的页面
.build()
.show();
}
cleanConf
这个task你换成下面这个版本:
task cleanConf(description: 'Cleans up conf directory') {
doLast {
def dir = new File(cuba.tomcat.dir, "/conf/${modulePrefix}")
if (dir.isDirectory()) {
ant.delete(includeemptydirs: true) {
fileset(dir: dir, includes: '**/*', excludes: 'local.app.properties')
}
}
}
}
只替换这部分吗?
还是报错
你在文件中搜一下,哪里还用到了 appHome
这个变量。贴一下代码,我给你发怎么改
只有一个地方用到了
注意看,build.gradle
文件中,有 configure(webModule)
和 configure(coreModule)
两个部分。
-
cleanConf
这个task在两个部分都有,分别替换为:
core:
task cleanConf(description: 'Cleans up conf directory') {
doLast {
def dir = new File(cuba.tomcat.dir, "/conf/${modulePrefix}-core")
if (dir.isDirectory()) {
ant.delete(includeemptydirs: true) {
fileset(dir: dir, includes: '**/*', excludes: 'local.app.properties')
}
}
}
}
web:
task cleanConf(description: 'Cleans up conf directory') {
doLast {
def dir = new File(cuba.tomcat.dir, "/conf/${modulePrefix}")
if (dir.isDirectory()) {
ant.delete(includeemptydirs: true) {
fileset(dir: dir, includes: '**/*', excludes: 'local.app.properties')
}
}
}
}
-
deployConf
只存在 web 中,替换为:
task deployConf(type: Copy) {
from file('src')
include "com/company/cb7/**" //这里要改成你的包名
into "$cuba.tomcat.dir/conf/${modulePrefix}"
}
已解决, 谢谢
在idea的哪里可以找到, jmix创建表的按钮, 我已经安装了jmix插件
你的项目是 CUBA,不是Jmix,CUBA插件你已经装了。CUBA创建表:
右键单击data model
创建好实体后启动项目会根据实体类上的@Table(name = “SVMS_CAR_REPAIR”)自动创建表吗