Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同一SQL表上的JPA OneToOne关系_Java_Mysql_Hibernate_Jpa - Fatal编程技术网

Java 同一SQL表上的JPA OneToOne关系

Java 同一SQL表上的JPA OneToOne关系,java,mysql,hibernate,jpa,Java,Mysql,Hibernate,Jpa,给定客户机类 public class Client { private String firstName; private String lastName; private Address address; //..// } 还有Address类 public class Address { private int houseNumber; private String streetName; private String city; private String state

给定客户机类

public class Client {

 private String firstName;
 private String lastName;
 private Address address;
  //..//
 }
还有Address类

public class Address {

private int houseNumber;
private String streetName;
private String city;
private String state;
private String zipCode;
private String country;
//...//
}

我创建了address类,因为它在其他类中使用,我不想复制代码。有没有一种方法,使用JPA,将地址信息显式地放入我的客户机SQL表中,而不是创建一个地址表,并使用主键作为两者之间的链接?

您不需要一对一关系,您可以使用嵌入式类型

@Entity
public class Client {
    @Id
    private long id;
    private String firstName;
    private String lastName;
    @Embedded
    private Address address;
}

@Embeddable
public class Address {
    private int houseNumber;
    private String streetName;
    private String city;
    private String state;
    private String zipCode;
    private String country;
}
通过这种方式,可以使用以下列映射表客户端:

first_name, last_name, house_number, street_name, city, state, zip_code, country

您可以在表中具有相同列的任何其他实体上重复使用该地址。

您在客户机表中是否有类地址的所有信息?所以,对于世界其他地区,所有数据都列在客户机和地址类中?是的,我认为这对我来说是理想的。(也就是说,我对Java持久性和所有东西都还不熟悉,所以它可能不是最好的解决方案)为什么不创建一个Adress表呢?尝试阅读有关数据库规范化的内容。在我看来,如果作为一个例子,我有使用地址的客户机和商店,这意味着在我的地址表中,我会有对我来说毫无意义的商店地址和客户机地址。如果存储一个地址是因为它属于客户机或商店,这是不相关的。商店可以指出它需要的地址,也可以指出客户。如果您没有地址表,例如,两个商店有相同的地址,则将信息存储两次。它增加了你的冗余度!