Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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和Hibernate-如何使OneToOne与SuperAppedClass而不是实体建立关系_Java_Hibernate - Fatal编程技术网

Java和Hibernate-如何使OneToOne与SuperAppedClass而不是实体建立关系

Java和Hibernate-如何使OneToOne与SuperAppedClass而不是实体建立关系,java,hibernate,Java,Hibernate,我有三个实体:Client、ClientConfigurationA和ClientConfigurationB 我试着做一些类似于: @Entity @Table(name = "CLIENT") public class Client { @Id private int id; @OneToOne(mappedBy = "client") private ClientConfiguration configuration // some gette

我有三个实体:
Client
ClientConfigurationA
ClientConfigurationB

我试着做一些类似于:

@Entity
@Table(name = "CLIENT")
public class Client {

    @Id
    private int id;

    @OneToOne(mappedBy = "client")
    private ClientConfiguration configuration

    // some getter and setter
}

@MappedSuperClass
public class ClientConfiguration {

    @Id
    private int id;

    @OneToOne
    @MapsId
    protected Client client;

    // getters and setters
}

@Entity(name = "CLIENT_CONF_A")
public class ClientConfigurationA extends ClientConfiguration { ... }

@Entity(name = "CLIENT_CONF_B")
public class ClientConfigurationB extends ClientConfiguration { ... }
但实际上我不能定义一个与
MappedSuperClass
相关的OneToOne,也不能定义一个实体

那么,实施该案例的最佳方式是什么

我已经试过了,但没有成功


感谢阅读。

这是不可能的,原因如下:

当hibernate处理实体时,它需要知道在解析一对一关系时要连接哪个表

@MappedSuperClass
的问题在于它没有定义表,因此可以从这个类继承多个实体,每个实体都有不同的表。Hibernate当时不知道要加入哪个表


如果您想拥有通用的超类,我建议使用抽象的
@Entity
类。

这是不可能的,原因如下:

当hibernate处理实体时,它需要知道在解析一对一关系时要连接哪个表

@MappedSuperClass
的问题在于它没有定义表,因此可以从这个类继承多个实体,每个实体都有不同的表。Hibernate当时不知道要加入哪个表


如果你想拥有一个通用的超类,我建议使用一个抽象的
@Entity
类。

经过多次尝试,我终于成功了

@Entity
@Table(name = "CLIENT")
public class Client {

    @Id
    private int id;

    @OneToOne(mappedBy = "client")
    private ClientConfiguration configuration

    // some getter and setter
}

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@DiscriminatorColumn(name = "TYPE")
public abstract class ClientConfiguration {

    @Id
    private int id;

    @Column(name = "TYPE")
    private String type;

    @OneToOne
    @MapsId
    protected Client client;

    // getters and setters
}

@Entity(name = "CLIENT_CONF_A")
public class ClientConfigurationA extends ClientConfiguration { ... }

@Entity(name = "CLIENT_CONF_B")
public class ClientConfigurationB extends ClientConfiguration { ... }

经过多次尝试,我终于成功了

@Entity
@Table(name = "CLIENT")
public class Client {

    @Id
    private int id;

    @OneToOne(mappedBy = "client")
    private ClientConfiguration configuration

    // some getter and setter
}

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@DiscriminatorColumn(name = "TYPE")
public abstract class ClientConfiguration {

    @Id
    private int id;

    @Column(name = "TYPE")
    private String type;

    @OneToOne
    @MapsId
    protected Client client;

    // getters and setters
}

@Entity(name = "CLIENT_CONF_A")
public class ClientConfigurationA extends ClientConfiguration { ... }

@Entity(name = "CLIENT_CONF_B")
public class ClientConfigurationB extends ClientConfiguration { ... }

你是说
扩展客户端配置
私有客户端配置
?如果没有,你想做什么就不清楚了这就是我的意思。很抱歉。此解决方案的可能副本无效。如果我保留
SINGLE_表
继承策略,它根本不起作用,Hibernate就找不到
CLIENT_CONF_A
CLIENT_CONF_B
表。如果我将其设置为
TABLE\u PER_CLASS
,他会找到表,但是
Client
中的
configuration
为空,而
ClientConfiguration
中的
Client
也为空。你的意思是
扩展ClientConfiguration
私有ClientConfiguration
?如果没有,你想做什么就不清楚了这就是我的意思。很抱歉。此解决方案的可能副本无效。如果我保留
SINGLE_表
继承策略,它根本不起作用,Hibernate就找不到
CLIENT_CONF_A
CLIENT_CONF_B
表。如果我将其设置为
TABLE\u PER_CLASS
,他会找到表,但是
configuration
from
Client
为空,而
Client
from
ClientConfiguration
也为空。好的,配置之间唯一的共同点是客户端的外键。所以,如果我不能在这里定义我的连接,我将不得不找到另一个解决方案。好的,事实上,配置之间唯一的共同点是客户端的外键。所以如果我不能在这里定义我的连接,我将不得不找到另一个解决方案。