2017-07-07 9 views
0

埋め込みID値がシーケンス化されていないか生成されていても、場合は、私はCustomDeviceModelsのリストを持つCustomDeviceTypeを持っているということです。ユーザーが新しいCustomDeviceTypeを作成すると、IDに使用された番号を含む属性が提供されます。 CustomDeviceTypeに接続されている各CustomDeviceModelについても同様です。エンハンストIDを持つ新しいエンティティにユーザが提供する値を持つ永続エンティティ

表devmodelsに(dev_type、model_nbr)の複合主キーがあるため、私はCustomDeviceModelのEmbeddedEdを作成しました。私は次のエラーを取得するCustomDeviceType持続しようとすると:

javax.persistence.EntityNotFoundException: Unable to find com.etisoftware.manager.beans.cborg.devices.CustomDeviceModel with id [email protected] 

DeviceModeIdが値を持っているので、ビューの休止状態の観点から理にかなって、それがデータベースに存在しなければなりません。しかし、それはしません。

私はこのテーブルの設定を変更できません。新しいCustomDeviceModelsを保存できるようにエンティティを設定するにはどうすればよいですか?

私は2つのテーブルdevtypesとdevmodelsあります

CREATE TABLE devtypes (
    dev_type integer NOT NULL, 
    dev_desc nchar(16) NOT NULL, 
    off_premise integer NOT NULL, 
    unrouteable integer DEFAULT 0                                                                , 
    custom_models integer DEFAULT 0                                                                , 
    force_case nchar(1) DEFAULT 'U                                                                ', 
    has_siblings integer DEFAULT 0                                                                , 
    PRIMARY KEY (dev_type) 
); 


CREATE TABLE devmodels (
    dev_type integer NOT NULL, 
    model_nbr integer NOT NULL, 
    model_desc nchar(20), 
    cablecard integer DEFAULT 0                                                                , 
    ont_type integer DEFAULT 0                                                                NOT NULL, 
    ont_port_type nchar(1) NOT NULL, 
    PRIMARY KEY (dev_type,model_nbr) 
); 

ALTER TABLE devmodels 
    ADD CONSTRAINT FOREIGN KEY (dev_type) 
    REFERENCES devtypes (dev_type); 

を私は次のエンティティを持っている:

@Entity 
@Table(name = "devtypes") 
public class CustomDeviceType 
{ 
    @Id 
    @Column(name = "dev_type") 
    private Integer   number; 

    @Column(name = "dev_desc") 
    private String   name; 

    @Column(name = "unrouteable") 
    private Boolean   unrouteable; 

    @Column(name = "off_premise") 
    private Boolean   offPremise; 

    @Column(name = "has_siblings") 
    private Boolean   hasSiblings; 

    @OneToMany(mappedBy = "deviceType", fetch = FetchType.LAZY) 
    private Set<CustomDeviceModel> deviceModels; 

    // Setters 

} 



@Entity 
@Table(name = "devmodels") 
public class CustomDeviceModel 
{ 
    @EmbeddedId 
    private DeviceModelId id; 

    public CustomDeviceModel() 
    { 
    id = new DeviceModelId(); 
    } 

    @Column(name = "model_desc") 
    private String   name; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "dev_type") 
    @MapsId("deviceTypeNumber") 
    private CustomDeviceType deviceType; 

    @OneToOne(mappedBy = "deviceModel", fetch = FetchType.LAZY) 
    @JoinColumns({ @JoinColumn(name = "dev_type"), @JoinColumn(name = "model_nbr") }) 
    private CustomDeviceTypeConfig deviceConfig; 

    public Integer getNumber() 
    { 
    return id.getNumber(); 
    } 

    public void setNumber(Integer number) 
    { 
    id.setNumber(number); 
    } 

    public void setDeviceType(CustomDeviceType deviceType) 
    { 
    this.deviceType = deviceType; 
    id.setDeviceTypeNumber(deviceType.getNumber()); 
    } 

    public CustomDeviceTypeConfig getDeviceConfig() 
    { 
    return deviceConfig; 
    } 

    public void setDeviceConfig(CustomDeviceTypeConfig deviceConfig) 
    { 
    this.deviceConfig = deviceConfig; 
    id.setDeviceTypeNumber(deviceConfig.getDeviceModel().getDeviceType().getNumber()); 
    id.setNumber(deviceConfig.getDeviceModel().getNumber()); 
    } 

    // other setters 

} 




@Embeddable 
public class DeviceModelId implements Serializable 
{ 
    private static final long serialVersionUID = 5215223205194404431L; 

    private Integer   deviceTypeNumber; 

    @Column(name = "model_nbr") 
    private Integer   number; 

    public Integer getNumber() 
    { 
    return number; 
    } 

    public void setNumber(Integer number) 
    { 
    this.number = number; 
    } 

    public Integer getDeviceTypeNumber() 
    { 
    return deviceTypeNumber; 
    } 

    public void setDeviceTypeNumber(Integer deviceTypeNumber) 
    { 
    this.deviceTypeNumber = deviceTypeNumber; 
    } 

    @Override 
    public int hashCode() 
    { 
    return new HashCodeBuilder().append(deviceTypeNumber).append(number).toHashCode(); 
    } 

    @Override 
    public boolean equals(final Object object) 
    { 
    if (object instanceof DeviceModelId) 
    { 
     final DeviceModelId other = (DeviceModelId) object; 
     return new EqualsBuilder().append(deviceTypeNumber, other.getDeviceTypeNumber()).append(number, other 
      .getNumber()).isEquals(); 
    } 
    return false; 
    } 
} 

答えて

0

だからこれは私の一部に誤りでした。私はカスケード型を追加するのを忘れていました。

@OneToMany(mappedBy = "deviceType"、fetch = FetchType.LAZY、cascade = CascadeType.ALL) プライベートSet deviceModels;

関連する問題