如果我创建一个像:
这样的表CREATE TABLE IF NOT EXISTS `user`(
`id` INT NOT NULL AUTO_INCREMENT,
`email_1_type` INT NULL,
`email_1` VARCHAR(255) NULL,
`email_2_type` INT NULL,
`email_2` VARCHAR(255) NULL,
`email_3_type` INT NULL,
`email_3` VARCHAR(255) NULL,
PRIMARY KEY (`id`)
)
我可以将email
列映射为列表吗?像:
public class Email{
private int type;
private String email;
// getter & setter
}
@Entity
@Table(name = "info_req_chat_time_detail")
public class User{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private List<Email> emails;
// getter & setter
}
答案 0 :(得分:0)
https://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/collections.html
作为要求,必须声明持久的集合值字段 作为接口类型(参见例7.2,“使用的集合映射”) @OneToMany和@JoinColumn“)。实际的界面可能是 java.util.Set,java.util.Collection,java.util.List,java.util.Map, java.util.SortedSet,java.util.SortedMap或任何你喜欢的东西 (&#34;你喜欢的任何东西&#34;意味着你必须编写一个实现 org.hibernate.usertype.UserCollectionType)。
如果只有Phones
包含id(FK), emailType, emailValue
的另一个表,那么这将是一个很好的设计。然后你可以做你正在列出的内容。
但是,如果您试图保持简单,并且确实知道3部手机,那就不要这样做了。您永远不知道您何时想要修改或扩充其中一个SQL列。如果需要在Java类中使用List,请构建一个private List<Email> getAllEmailsAsList()
方法,收集所有单个电子邮件字段并将其打包到列表中。
在@Entity
课程中使用6个额外的成员字段来处理此表的创建并没有错。