我有这些桌子:
CREATE TABLE PRODUCT (
ID NUMBER(19,0) NOT NULL,
CONSTRAINT PRODUCT_PK
PRIMARY KEY (ID)
USING INDEX (
CREATE UNIQUE INDEX PRODUCT_PK
ON PRODUCT(ID)
...
)
)
...
CREATE TABLE PRODUCT_LOCALE (
PRODUCT_ID NUMBER(19,0) NOT NULL,
LOCALE VARCHAR2(12 CHAR) NOT NULL,
NAME VARCHAR2(160 CHAR),
CONSTRAINT PRODUCT_LOCALE_PK
PRIMARY KEY (PRODUCT_ID,LOCALE)
)
...
由该类表示:
public class Product extends LocalizedEntity<Product.LocalizedFields> {
....
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public static class LocalizedFields implements Serializable {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
public abstract class LocalizedEntity<T> implements serializable {
....
private Map<Locale, T> localizedFields = new HashMap<Locale, LF>();
public Map<Locale, T> getLocalizedFields() {
return localizedFields;
}
public void setLocalizedFields(Map<Locale, T> localizedFields) {
this.localizedFields = localizedFields;
}
}
.....
<map name="localizedFields" table="product_locale" lazy="false" fetch="select" batch-size="100">
<cache usage="read-write" />
<key column="product_id" not-null="true" />
<map-key type="locale">
<column name="locale" length="12" not-null="true" />
</map-key>
<composite-element class="com.myproject.Product$LocalizedFields">
<property name="name" type="string">
<column name="name" length="500" />
</property>
</composite-element>
</map>
.....
@Entity
@Table(name = "product")
public class Product extends LocalizedEntity<Product.LocalizedFields> {
....
private Long id;
@Id
@Column(name = "id")
@GeneratedValue(strategy= GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@ElementCollection(fetch = FetchType.EAGER)
@JoinTable(name = "product_locale", joinColumns = @JoinColumn(name = "product_id", nullable = false))
@MapKeyClass(value = Locale.class)
@MapKeyColumn(name = "locale", length = 12, nullable = false)
@BatchSize(size = 100)
@Fetch(FetchMode.SELECT)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Embedded
public Map<Locale, LocalizedFields> getLocalizedFields() {
return super.getLocalizedFields();
}
@Embeddable
public static class LocalizedFields implements Serializable {
....
private String name;
@Column(name = "name", length = 500, nullable = false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
@MappedSuperclass
public abstract class LocalizedEntity<T> implements serializable {
....
private Map<Locale, T> localizedFields = new HashMap<Locale, LF>();
public Map<Locale, T> getLocalizedFields() {
return localizedFields;
}
public void setLocalizedFields(Map<Locale, T> localizedFields) {
this.localizedFields = localizedFields;
}
}
原因:org.hibernate.mappingException:无法确定:java.util.map的类型,位于表:product,列:[org.hibernate.mapping.simplevale.getType(simplevale.java:349)位于org.hibernate.mapping.simplevale.isvalid(simplevale.java:322)位于org.hibernate.mapping.property.isvalid(property.java:241)位于org.hibernate.mapping.persistentclass.validate(ERNATE4.LocalSessionFactoryBean.AfterPropertiesSet(LocalSessionFactoryBean.java:439)位于org.SpringFramework.Beans.Factor.Support.AbstracTautOWIRECAPABLEBeanFactor.InvokeInitMethods(AbstracTautOWIRECAPABLEBeanFactor.1633)位于org.SpringFramework.Beans.Factor.Support.AbstracTautOWIRECAPABLEBeanFactor.InitializeBean(
如果我用@mapkey(“locale”)替换@mapkeyclass(value=locale.class)和@mapkeycolumn,则会引发以下错误:
原因:org.hibernate.AnnotationException:未找到关联类:com.myproject.product$localizedfields在org.hibernate.cfg.Annotations.mapbinder.bindkeyfromAssociationTable(mapbinder.java:133)在org.hibernate.cfg.Annotations.mapbinder.access$000(mapbinder.java:76)在org.hibernate.cfg.Annotations.mapbinder.mapbinder$1。secondpass(mapbinder.java:111)在t org.springframework.orm.hibernate4.localsessionfactorybean.afterpropertiesset(localsessionfactorybean.java:439)在org.springframework.beans.factor.support.abstractautowirecapablebeanfactor.invokeInitMethods(abstractautowirecapablebeanfactor.1633)在
我发现问题是关键的“区域”
根据JPA文档(http://docs.oracle.com/javaee/6/api/index.html?javax/persistence/mapkeyclass.html):
“为java.util.map类型的关联指定映射键的类型。映射键可以是基本类型、可嵌入类或实体”
有了这些注释,它必须工作:
@ElementCollection(fetch = FetchType.EAGER)
@JoinTable(name = "product_locale", joinColumns = @JoinColumn(name = "product_id", nullable = false))
@MapKeyColumn(name = "locale", length = 12, nullable = false)
@MapKeyType(value = @Type(type = "locale"))
@BatchSize(size = 100)
@Fetch(FetchMode.SELECT)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
我想让hibernate生成一些带有外键的表等等。我将给出我希望hibernate生成的查询的一个示例: 所以这个查询应该由hibernate通过注释生成。与此对应的类是: 有关中的应映射到的内容的示例(中的每个助记符在中只有一个值): 正如您所看到的,我在文档的帮助下做了一些尝试,但是我不能让Hibernate生成外键。如果有人能告诉我这个类需要的注释和值,那就太好了,这样我就可以自己为其他类做
在MySQL数据库上有一个没有任何主键的表。我想使用hibernate访问Java的数据端。但是,hibernate无法解析映射文档。其他表映射正确。这个问题是不是没有主键的原因?我必须至少创建一个主键来映射此表吗?还是还有别的什么? 表
如果我没有指定JoinColumn,hibernate将尝试使用字段child_username和child_parentid进行映射。如果我只指定一个Joincolumn,我会得到一个断开的映射。如果指定了两个JoinColumns,则parent上没有列可指定。 我如何映射这个类并将用户名作为标准传入?(它来自身份验证数据)或者如果我偏离了轨道,我如何以不同的方式这样做。
我正在尝试我们非主键作为外键在我的应用程序。场景如下:我有EMPLOYEE和EMPLOYEE_PROPERTIES表。Employee和Employee属性之间存在一对多的关系。下面是我的架构: 下面是我的hibernate映射XML:------------------------------- -------------员工属性------------------- 是否可以引用非主键作为外键
我正在使用Hibernate和JPA注释来映射我的类。当hibernate尝试映射这个类时,我遇到了一个问题 我的Social alStat类是: 我得到了这个错误: 我猜发生这种情况是因为我试图映射到一个基本类,但@ElementCollection注释不应该解决这个问题吗? 我的item类如下所示:
Hi编写Spring应用程序,使用Spring Security。这是我的用户和帐户角色数据库: 我的实体类: 当我尝试登录我的系统我有错误: Hibernate:选择userrolese0_. username作为username3_1_0_,userrolese0_. id作为id1_0_0_,userrolese0_. id作为id1_0_1_,userrolese0_. name作为nam