Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 用JPA映射弱实体_Java_Hibernate_Jpa - Fatal编程技术网

Java 用JPA映射弱实体

Java 用JPA映射弱实体,java,hibernate,jpa,Java,Hibernate,Jpa,我的数据库包含一个公司和员工的数据库。我把员工塑造成公司的弱势实体 我的JPA注释如下所示: @Entity public class Company extends Model { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long id; @OneToMany(mappedBy = "company", cascade = CascadeType.ALL) priv

我的数据库包含一个公司和员工的数据库。我把员工塑造成公司的弱势实体

我的JPA注释如下所示:

@Entity
public class Company extends Model {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long id;

    @OneToMany(mappedBy = "company", cascade = CascadeType.ALL)
    private List<Employee> employees;

}
将创建以下SQL代码:

create table employee (
  id                            bigint auto_increment not null,
  company_id                    bigint not null,
  constraint pk_employee primary key (id)
);

alter table employee add constraint fk_employee_company_id foreign key (company_id) references company (id) on delete restrict on update restrict;
我想要的是(约束pk_员工主键(id,公司id):

有没有办法创建这样的SQL脚本

编辑:
Employee
实现
Serializable
并不奏效

Caused by: javax.persistence.PersistenceException: Could not find BeanDescriptor for class models.Company. Perhaps the EmbeddedId class is not registered?
    at io.ebeaninternal.server.deploy.BeanEmbeddedMetaFactory.create(BeanEmbeddedMetaFactory.java:26)
    at io.ebeaninternal.server.deploy.BeanPropertyAssocOne.<init>(BeanPropertyAssocOne.java:79)
    at io.ebeaninternal.server.deploy.BeanPropertyAssocOne.<init>(BeanPropertyAssocOne.java:62)
    at io.ebeaninternal.server.deploy.meta.DeployBeanTable.createProperty(DeployBeanTable.java:68)
    at io.ebeaninternal.server.deploy.meta.DeployBeanTable.createIdProperties(DeployBeanTable.java:59)
    at io.ebeaninternal.server.deploy.BeanTable.<init>(BeanTable.java:42)
原因:javax.persistence.PersistenceException:找不到类models.Company的BeanDescriptor。可能EmbeddedId类未注册?
在io.ebeaninternal.server.deploy.BeanEmbeddedMetaFactory.create(BeanEmbeddedMetaFactory.java:26)
位于io.ebeaninternal.server.deploy.BeanPropertySsocone。(BeanPropertySsocone.java:79)
位于io.ebeaninternal.server.deploy.BeanPropertySsocone。(BeanPropertySsocone.java:62)
位于io.ebeanternal.server.deploy.meta.DeployBeanTable.createProperty(DeployBeanTable.java:68)
位于io.ebeaninternal.server.deploy.meta.DeployBeanTable.createIdProperties(DeployBeanTable.java:59)
位于io.ebeaninternal.server.deploy.BeanTable。(BeanTable.java:42)

只需在您的
@JoinColumn
注释下添加
@Id
注释。但是
员工
类必须
实现可序列化
才能使用此解决方案。

感谢@Alan Hay为我们提供了链接

下面是如何创建一个弱实体地址,该地址从表pmo_user中获取其Id(user_Id)

pmo_user{id, ....}
test_address{user_id, address}
============================

@Entity
@Table(name="test_address")
public class Address 
{
    @Id
    @Column(name="user_id")
    protected int userId;

    @OneToOne
    @PrimaryKeyJoinColumn(name="user_id", referencedColumnName="id")
    protected PmoUser owner;

    @Column(name="address")
    protected String address;


    public void setOwner(PmoUser owner) 
    {
        this.owner = owner;
        this.userId = owner.getId();
    }


    @Override
    public String toString() {
        return "Address [userId=" + userId + ", owner=" + owner + ", address=" + address + "]";
    }    

}

你为什么需要这个?弱实体是什么意思?你要找的是员工的复合PK。这是相当标准的,选项如下:@Alan Hay如果你将此添加为解决方案,我可以接受。谢谢。它成功了。不幸的是,它不起作用。我添加了错误消息。
pmo_user{id, ....}
test_address{user_id, address}
@Entity
@Table(name="test_address")
public class Address 
{
    @Id
    @Column(name="user_id")
    protected int userId;

    @OneToOne
    @PrimaryKeyJoinColumn(name="user_id", referencedColumnName="id")
    protected PmoUser owner;

    @Column(name="address")
    protected String address;


    public void setOwner(PmoUser owner) 
    {
        this.owner = owner;
        this.userId = owner.getId();
    }


    @Override
    public String toString() {
        return "Address [userId=" + userId + ", owner=" + owner + ", address=" + address + "]";
    }    

}