2016-03-27 3 views
1

Я довольно новыми зимовать, но мне нужно сделать отображение на один-к-одному, У меня есть таблица resources, которая имеет внешний ключ res_music_id к столу music.
после многократного поиска и настройки. Я заставил его работать, но была еще одна проблема: обновлен идентификатор resources, но значение res_music_id не было; поэтому каждый раз, когда я называл индекс resources, он дал мне такую ​​же запись в music. Поэтому мне нужно динамически изменять res_music_id, как это сделать? Кстати, у меня есть база данных в mySQL. Вот мой код:спящий режим - обновление не-идентификатор внешнего ключа

ресурсы

package database; 

import com.sun.istack.internal.NotNull; 
import org.hibernate.annotations.*; 
import org.hibernate.annotations.Parameter; 

import javax.persistence.*; 
import javax.persistence.CascadeType; 
import javax.persistence.Entity; 
import javax.persistence.Table; 
import java.io.Serializable; 
import java.util.Arrays; 

/** 
* @author Jari Van Melckebeke 
*/ 
@Entity 
@Table(name = "resources", catalog = "teresaDB") 
public class Resources implements Serializable { 

    private int resId; 
    private String sort; 
    private String location; 
    private int resMusicId; 
    private Music music; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "res_id") 
    public int getResId() { 
     return resId; 
    } 

    @Column(name = "res_sort") 
    public String getSort() { 
     return sort; 
    } 

    @Column(name = "res_location") 
    public String getLocation() { 
     return location; 
    } 


    @GenericGenerator(name = "gen", strategy = "property", parameters = @Parameter(name = "property",value = "id")) 
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "gen") 
    @Column(name = "res_music_id") 
    public int getResMusicId() { 
     return resMusicId; 
    } 


    public void setResId(int resId) { 
     this.resId = resId; 
    } 

    public void setSort(String sort) { 
     this.sort = sort; 
    } 

    public void setLocation(String location) { 
     this.location = location; 
    } 


    public void setMusic(Music music) { 
     this.music = music; 
    } 

    public void setResMusicId(int resMusicId) { 
     this.resMusicId = resMusicId; 
    } 

    @Override 
    public String toString() { 
     return Arrays.toString(new String[]{"id:" + getResId(), "sort:" + getSort(), "location:" + getLocation(), "music-id:" + getResMusicId()}); 
    } 


    @OneToOne(cascade = CascadeType.ALL) 
    @JoinColumn(referencedColumnName = "id", name = "res_music_id", insertable = false, updatable = false) 
    public Music getMusic() { 
     return music; 
    } 
} 

музыка

package database; 

import org.hibernate.annotations.*; 

import javax.annotation.Nullable; 
import javax.persistence.*; 
import javax.persistence.AccessType; 
import javax.persistence.CascadeType; 
import javax.persistence.Entity; 
import javax.persistence.Table; 
import java.io.Serializable; 
import java.util.Arrays; 

/** 
* @author Jari Van Melckebeke 
*/ 
@Entity 
@Table(name = "music", catalog = "teresaDB") 
public class Music implements Serializable { 

    private int musicId; 
    private String musicName; 
    private String musicArtist; 
    private String musicAlbum; 
    private Resources resources; 

    @Column(name = "track") 
    public String getMusicName() { 
     return musicName; 
    } 

    @Column(name = "artist") 
    public String getMusicArtist() { 
     return musicArtist; 
    } 

    @Id 
    @Access(value = AccessType.PROPERTY) 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    public int getMusicId() { 
     return musicId; 
    } 


    @Column(name = "album") 
    @Nullable 
    public String getMusicAlbum() { 
     return musicAlbum; 
    } 


    public void setMusicId(int musicId) { 
     this.musicId = musicId; 
    } 

    public void setMusicAlbum(String musicAlbum) { 
     this.musicAlbum = musicAlbum; 
    } 

    public void setMusicArtist(String musicArtist) { 
     this.musicArtist = musicArtist; 
    } 

    public void setMusicName(String musicName) { 
     this.musicName = musicName; 
    } 

    @Override 
    public String toString() { 
     return Arrays.toString(new String[]{"id:" + getMusicId(), "track:" + getMusicName(), "artist:" + getMusicArtist(), "album:" + getMusicAlbum()}); 
    } 

    @OneToOne(cascade = CascadeType.ALL) 
    @JoinColumn(referencedColumnName = "res_music_id", name = "id", insertable = false, updatable = false) 
    public Resources getResources() { 
     return resources; 
    } 

    public void setResources(Resources resources) { 
     this.resources = resources; 
    } 
} 

MySql

CREATE TABLE `resources` (
    `res_id` int(11) NOT NULL AUTO_INCREMENT, 
    `res_sort` varchar(255) DEFAULT NULL, 
    `res_location` varchar(255) DEFAULT NULL, 
    `res_music_id` int(11) DEFAULT NULL, 
    PRIMARY KEY (`res_id`), 
    KEY `mus_ind` (`res_music_id`), 
    CONSTRAINT `resources_ibfk_1` FOREIGN KEY (`res_music_id`) REFERENCES `music` (`id`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 

CREATE TABLE `music` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `track` varchar(255) DEFAULT NULL, 
    `artist` varchar(255) DEFAULT NULL, 
    `album` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 

Я знаю, я не очень хорошо в «чистом коде»

Заранее спасибо

ответ

0

В вашей материнской компании (Resource) вы определяете объединение (с @JoinColumn) как вставные = ложь, обновляемые = ложь, поэтому ответственность за создание/удушение соответствующего субъекта не входит в текущую организацию.

Смежные вопросы