Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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 休眠自定义外键_Java_Hibernate - Fatal编程技术网

Java 休眠自定义外键

Java 休眠自定义外键,java,hibernate,Java,Hibernate,我需要使用一个数据库,其中有两个自定义外键表。它将在特定条件下引用一个字段,在其他条件下引用另一个字段 如何使用Hibernate对此进行注释 这是桌子 --------------------------- --------------------------- | customer | | address | -------------------

我需要使用一个数据库,其中有两个自定义外键表。它将在特定条件下引用一个字段,在其他条件下引用另一个字段

如何使用Hibernate对此进行注释

这是桌子

---------------------------                      ---------------------------
|         customer        |                      |         address         |
---------------------------                      ---------------------------
| - id                    |                      | - address_code          |
| address_code            |                      | - customer_id           |
| primary_language_code   |                      | - language_code         |
| secondary_language_code |                      | ...                     |
| ...                     |                      |                         |
---------------------------                      ---------------------------
-
开头的字段是主键(部分)。 外键如下所示:

上的客户加入地址
(customer.id=address.customer\u id
和customer.address\u code=address.address\u code

当customer.primary_language_code时,我发现了一些使用sql注入的令人毛骨悚然的黑客行为,解决了我的问题,但在某些情况下很容易出现bug

如果join仅在
主语言上
,则代码如下:

@OneToOne
@JoinColumns({@JoinColumn(name=“id”,referencedColumnName=“customer\u id”),
@JoinColumn(name=“primary\u language\u code”,referencedColumnName=“language\u code”),
@JoinColumn(name=“address\u code”,referencedColumnName=“address\u code”)})
私人地址;
@Column(name=“language\u code”,nullable=false)
专用int语言代码;
Hibernate将生成如下查询:

选择customer0.id作为。。。,
customer0。主要语言代码为。。。,
客户0。辅助语言代码为。。。,
客户0\地址\代码为。。。
想法是更改名称值以插入sql代码:

@OneToOne
@JoinColumns({@JoinColumn(name=“id”,referencedColumnName=“customer\u id”),

@JoinColumn(name=“id,case when customer.primary_language_code因此,我发现了一些使用sql注入的令人毛骨悚然的黑客行为,解决了我的问题,但在某些情况下很容易出现bug

如果join仅在
主语言上
,则代码如下:

@OneToOne
@JoinColumns({@JoinColumn(name=“id”,referencedColumnName=“customer\u id”),
@JoinColumn(name=“primary\u language\u code”,referencedColumnName=“language\u code”),
@JoinColumn(name=“address\u code”,referencedColumnName=“address\u code”)})
私人地址;
@Column(name=“language\u code”,nullable=false)
专用int语言代码;
Hibernate将生成如下查询:

选择customer0.id作为。。。,
customer0。主要语言代码为。。。,
客户0。辅助语言代码为。。。,
客户0\地址\代码为。。。
想法是更改名称值以插入sql代码:

@OneToOne
@JoinColumns({@JoinColumn(name=“id”,referencedColumnName=“customer\u id”),

@JoinColumn(名称=”id,case when customer.primary\u language\u code在这种情况下,您应该使用注释一对一映射。示例addressCode也应该用于联合语言我这里的问题不是如何使用简单的一对一映射。我的问题是一个列将映射列
primary\u language\u code
secondary\u language\u code
dep在条件上终止。我如何编写此条件?我的建议是按原样加载它,并在模型对象中管理条件。这是我目前正在做的解决方法,因为我没有找到问题的解决方案。但是,我对此感觉不好,因为我正在更改代码(模型)被其他几个应用程序使用:/n在这种情况下,您应该使用注释oneToOne映射。示例addressCode也应该用于连接column我这里的问题不是如何使用简单的一对一映射。我的问题是一个列将映射列
主语言代码
次语言代码
depending条件。我如何编写此条件?我的建议是按原样加载并在模型对象中管理条件。这是我目前正在做的工作,因为我没有找到问题的解决方案。但是,我对此感觉不太好,因为我正在更改的代码(模型)被其他几个应用程序使用:/
@Getter              \
@Setter              |   //lombok
@NoArgsConstructor   /
@Entity
@Table(name = "customer")
public class Customer{

    @Id
    @Column(name="id")
    private int id;

    @Column(name="primary_language_code")
    private int primaryLanguageCode;

    @Column(name="secondary_language_code")
    private int secondaryLanguageCode;

    ?
    private Address address;
}

@Getter              \
@Setter              |   //lombok
@NoArgsConstructor   /
@Entity
@Table(name = "address")
public class Address {

    @EmbeddedId
    private AddressId id;
}

@Getter              \
@Setter              |   //lombok
@NoArgsConstructor   /
@Embeddable
public class AddressId implements Serializable, Comparable<AddressId> {

    @Column(name = "customer_id")
    private int customerId;

    @NonNull
    @Column(name = "address_code")
    private String addressCode;

    ?
    private int languageCode;
}