【发布时间】:2019-11-18 10:16:31
【问题描述】:
我必须处理声明如下的视图(Oracle 11g):
create view V_SOME_VIEW as
select X, Y
from SOME_TABLE
以及它的实体:
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
@Entity
@Table("V_SOME_VIEW")
@NamedQueries({
@NamedQuery(name = "VSomeView.findAll", query = "SELECT v FROM VSomeView v")})
public class VSomeView implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Lob
@Column(name = "X")
private Object x;
@Lob
@Column(name = "Y")
private Object y;
...
}
使用Gradle Metamodel Plugin 生成静态元模型后,我有以下元模型没有属性y:
import javax.annotation.Generated;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(VSomeView.class)
public abstract class VSomeView_ {
public static volatile SingularAttribute<VSomeView, Object> x;
public static final String X = "x";
}
在应用程序启动时出现如下错误:
错误 o.h.ejb.metamodel.MetadataContext:HHH015011:无法找到静态元模型字段:...VSomeView_#y
如果我将列类型从 java.lang.Object 更改为 java.lang.String,则正确生成字段 y。谁能解释一下,请问这是什么原因?
【问题讨论】:
-
见this。默认情况下,休眠使用 java.lang.String 作为
CLOBJDBC 类型。否则,您应该使用custom hibernate type。 -
@SternK,感谢您的回复!不幸的是,我仍然不明白为什么不正确的类型会导致元模型属性丢失。我试图用谷歌搜索它,但没有结果。请您指出一个文档部分或对此进行简要解释吗?提前致谢!
-
能否解释一下,为什么要将
x, y字段声明为java.lang.Object?你想达到什么目标? -
老实说,我不知道。这是遗留代码,我只是想弄清楚为什么缺少元模型的某些属性。事实上,字段实际上是 BLOB 的情况很少。它们中的大多数只是 VARCHAR。考虑到您的第一条评论,我认为最好只修复 Java 代码中的类型
标签: java hibernate jpa generator metamodel