2013-05-28 2 views
2

У меня есть Spring MVC и Data JPA. Я пытаюсь выполнить отображение таблиц, которые у меня есть. Структура, как показано ниже:Сопоставление и выборка объектов с составными ключами с использованием данных весны JPA

Device 
-------------- 
PK deviceId 
    deviceName 


Setting 
-------------- 
PK deviceId 
PK packageName 
PK name 
    value 

И у меня есть классы для этих таблиц:

@Entity 
public class DeviceSetting implements Serializable { 
    @EmbeddedId 
    private String deviceId 
    private String deviceName; 

    @ManyToOne 
    @JoinColumn(name="deviceId", referencedColumnName="deviceId", insertable=false, updatable=false) 
    private Device device; 

    //Setters and Getters 
} 

@Embeddable 
public class DeviceSettingPk implements Serializable { 

    private String deviceId; 
    private String packageName; 
    private String name; 

    public DeviceSettingPk(){} 
    public DeviceSettingPk(String deviceId, String packageName, String name) { 
     super(); 
     this.deviceId = deviceId; 
     this.packageName = packageName; 
     this.name = name; 
    } 

     //Setters and Getters 
} 

@Entity 
public class Device implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @NotEmpty 
    @Id 
    @Column(name="deviceId") 
    private String deviceId; 

     private String deviceName; 

     //Getters and Setters 
} 

Но я не получил данные устройства, когда я помещал устройство и данные настройки имеет такой же DeviceId и запрашиваются DeviceSetting с помощью repository.findOne (DeviceId);

Что еще мне нужно сделать, чтобы получить данные устройства? Любые советы будут полезны. Благодарю.

ответ

10

Измените отображение следующим образом.

@Entity 
public class DeviceSetting implements Serializable { 
    @EmbeddedId 
    private DeviceSettingPk deviceSettingId; 


    @ManyToOne 
    @JoinColumn(name="deviceId", referencedColumnName="deviceId", insertable=false, updatable=false) 
    private Device device; 

    //Setters and Getters 
} 

А затем используйте следующий код для поиска.

DeviceSettingPk id = new DeviceSettingPk(deviceId, packageName, name); 

// use the deviceSettingRespository to lookup 
repository.findOne(id); 
Смежные вопросы