gpt4 book ai didi

java - 使用Ebean View `@View`而不复制模型

转载 作者:行者123 更新时间:2023-12-02 01:56:36 26 4
gpt4 key购买 nike

我正在尝试基于简单联接在表上创建 Ebean View ,当我尝试扩展基表的模型时,我遇到了问题。

View 字段和模型字段完全相同。

我的表模型如下所示:

@Entity
@Table(name = "assets")
public class Asset extends EnvironmentModel<Integer> {
@Id
@Column
@PrimaryKey
@Attribute(index = 0)
private int assetId;
@Column
@Attribute(index = 1)
private String make;
etc...
}

效果很好。

现在我试图用View做的是:

@View(name = "assets_view")
public class AssetView extends Asset {
}

我想我也许能够做到这一点,因为 AssetViewAsset 具有完全相同的字段。

当我这样做时,我得到了异常:
引起原因:javax.persistence.PersistenceException:models.asset.AssetView不是在此服务器上注册的实体Bean?

所以我的下一个尝试是向 View 类添加 @Entity 注释。例如

@Entity
@View(name = "assets_view")
public class AssetView extends Asset {
}

编译时出现以下异常:
注入(inject)构造函数时出错,java.lang.IllegalStateException:检查类 models.asset.AssetView 并发现类 models.asset.Asset 具有 @Entity 注释而不是 MappedSuperclass?

但我无法从我的 Asset 类中删除 @Entity 注释,因为我需要它来执行插入。

我的问题是:有没有办法让 View 和表共享相同的模型,以便我可以从 View 中查询并向表中插入/更新?

最佳答案

好吧,我找到了答案,但我不知道这是否显而易见。

基本上,我只是将我的基类设为 @MappedSuperClass 例如

@MappedSuperclass
public class _Asset extends EnvironmentModel<Integer> {
@Id
@Column
@PrimaryKey
@Attribute(index = 0)
private int assetId;
@Column
@Attribute(index = 1)
private String make;
etc..
}

然后我从 Mapped 父类(super class)扩展了我的 Asset 表和 AssetView

@Entity
@Table(name = "assets")
public class Asset extends _Asset {
}

--

@Entity
@View(name = "assets_view")
public class AssetView extends _Asset {
public static final Model.Find<Integer, AssetView> finder = new Model.Finder<>(AssetView.class);
}

关于java - 使用Ebean View `@View`而不复制模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52208884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com