首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JPA子实体中的空父外键

JPA子实体中的空父外键
EN

Stack Overflow用户
提问于 2016-12-05 06:41:33
回答 1查看 1.1K关注 0票数 0

在OneToMany双向关系中,我不能将子级外键与父级关联起来。我有一个父类Union是这样定义的:

代码语言:javascript
运行
复制
@Entity
@PrimaryKeyJoinColumn(referencedColumnName="id")
@Table(name="union_tb")
@Inheritance( strategy = InheritanceType.JOINED )     
public class Union extends User{

@Column(unique=true)
String Name;
float uniondue = 0;


@OneToMany(targetEntity=ServiceCharge.class,cascade=CascadeType.REMOVE, orphanRemoval=true,fetch = FetchType.EAGER,mappedBy="union")
List<ServiceCharge> ServiceCharges;
@OneToMany(targetEntity=Employee.class,cascade=CascadeType.REMOVE, orphanRemoval=true,fetch = FetchType.EAGER)
List<Employee> Employee;

public void PostServiceCharge(ServiceCharge charge) {
    ServiceCharges.add(charge);

}

以及这样定义的子类ServiceCharge:

代码语言:javascript
运行
复制
@Entity
@Table
 public class ServiceCharge implements Serializable{


@Id @GeneratedValue(strategy= GenerationType.AUTO)
int ChargeID;
String Service;
@Temporal(TemporalType.TIMESTAMP)
Calendar  TimeStamp;
float ChargeAmount;
@ManyToOne
@JoinColumn(name="union_id")
Union union;

public ServiceCharge(){super();}




public ServiceCharge(float chargeAmount, String service, String timestamp/*, Union union*/) throws ParseException {
    super();
    ChargeAmount = chargeAmount;
    Service = service;
    TimeStamp = TimeManagUtil.getGCobjectfromString(timestamp);
    //this.Union = union;
}

// getters and setters
}

然后我运行测试代码:

代码语言:javascript
运行
复制
    @Test
public void Test() throws Exception {
    ServiceCharge charge1 = new ServiceCharge(60,"service for employee","27/11/2016 20:35:00");
    Union u = new Union("Sindacate", 80);
    UnionController.add(u);
    ServiceController.add(charge1, u);
}

正如您所看到的,在将Union u持久化到数据库之后,我正在将两个实体与控制器相关联,ServiceController.add只是使用Union setter将实体charge1添加到servicecharges列表中,然后将该实体持久化到数据库中。

但是,测试运行正常,但我只能看到以下内容:

代码语言:javascript
运行
复制
 | ChargeID | ChargeAmount | Service              | TimeStamp           | union_id |
 +----------+--------------+----------------------+---------------------+----------+
 |        6 |           60 | service for employee | 2016-11-27 20:35:00 |     NULL |
 |        7 |           10 | service for employee | 2016-11-27 20:45:00 |     NULL


 | Name      | uniondue | id |
 +-----------+----------+----+
 | Sindacate |       80 |  5 |
 +-----------+----------+----+

如您所见,union_id被设置为null。我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2016-12-05 06:56:09

尝试首先实例化Union类,然后在ServiceCharge的构造函数中初始化它。

代码语言:javascript
运行
复制
@Test
public void Test() throws Exception {
    Union u = new Union("Sindacate", 80);
    UnionController.add(u);
    ServiceCharge charge1 = 
              new ServiceCharge(60,"service for employee","27/11/2016 20:35:00", u); // uncomment your parameter here that accepts Union class type.
    ServiceController.add(charge1, u);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40964586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档