[英]How to map a one-to-many result to a Hibernate entity which is joined using a non-primary key?
[英]Hibernate One-To-Many, i want not use primary Key to Many Entity
我想使用表格格式
表“帳戶”
CREATE TABLE `account` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
)
表“ Account_options”
CREATE TABLE `account_options` (
account_id bigint(20) NOT NULL,
name varchar(50) NOT NULL,
value varchar(255) NOT NULL,
KEY `A` (`account_id`)
CONSTRAINT `A` FOREIGN KEY (`account_id`) REFERENCES `account` (`id`)
)
這就是為什么我要使用帳戶可選變量。
此Optional變量不需要主鍵。
然后根據
@Entity
@Table ( name = "account" )
public class Account {
@Id
@GeneratedValue ( strategy = GenerationType.AUTO )
private long id;
@OneToMany( cascade = { CascadeType.ALL } )
@JoinColumn( name = "account_id" )
private List<AccountOption> options = new ArrayList<AccountOption>();
}
@Entity
@Table ( name = "account_options" )
public class AccountOption {
@ManyToOne( cascade = { CascadeType.ALL } )
@JoinColumn( name = "account_id" )
private Account account;
@Column ( length = 50 )
private String name;
@Column ( length = 255 )
private String value;
}
但是這個來源是崩潰;
Caused by: org.hibernate.AnnotationException: No identifier specified for entity: test.domain.AccountOption
at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:272)
at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:227)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:712)
at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:636)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:359)
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1206)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
... 34 more
我不知道為什么需要在此表上使用主鍵。
您如何解決呢?
在該表上創建一個PRIMARY KEY。
休眠需要一個PRIMARY KEY。 期。 感嘆號。
從Hibernate文檔中:
“映射的類必須聲明數據庫表的主鍵列。”
參考: https : //docs.jboss.org/hibernate/core/4.3/manual/en-US/html/ch05.html#mapping-declaration-id
我們可以繼續討論為什么Hibernate需要聲明主鍵,然后我們可以繼續討論您想要的東西。 但是,在討論的最后,歸根結底,可以歸結為:Hibernate在該表上需要一個主鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.