2015-09-27 4 views
0

У меня есть два объекта, которые имеют отношение OneToOne между ними: Проект и Пожертвование. проект объект реле определенной логика Пожертвования объекта, который находится внутри проект объекта (пожертвования таблицы shopuld быть заполнена, когда проектов заполнена) .my цель состоит в том, чтобы сделать Пожертвования объекта сохраняться при Проект сохраняется. Мои классы:hibernate сохраняются два объекта одновременно

Project.java

@Entity 
@Table(name="projects") 
public class Project{ 

    private int id; 
    private String name; 

    public Donation donation; 

    public Project() {} 

    public Project(String name, Donation donation) { 
     this.name = name; 
     this.donation = donation; 
    } 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name="project_id") 
    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 
    @Column(name="project_name") 
    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
    @OneToOne 
    @JoinColumn(name = "project_id") 
    public DonationLogic getDonation() { 
     return donation; 
    } 

    public void setDonation(DonationLogic donation) { 
     this.donation = donation; 
    } 
} 

Donation.class

@Entity 
@Table(name="donations") 
public class Donation { 
    private int totalAmount; 
    private int daysLeft; 
    private double collectAmount; 
    private int id; 
    private Project project; 

    public Donation() {} 

    public Donation(int totalAmount, int daysLeft) { 
     if(totalAmount <= 0 || daysLeft <= 0) { 
      throw new IllegalArgumentException(); 
     } 
     this.totalAmount = totalAmount; 
     this.daysLeft = daysLeft; 
     this.collectAmount = 0.0; 
    } 

    public Donation(int totalAmount, int daysLeft, double collectedamount) { 
     if(totalAmount <= 0 || daysLeft <= 0) { 
      throw new IllegalArgumentException(); 
     } 
     this.totalAmount = totalAmount; 
     this.daysLeft = daysLeft; 
     this.collectAmount = collectedamount; 
    } 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name="donation_id") 
    public int getId() { 
     return id; 
    } 

    @OneToOne 
    @JoinColumn(name="donation_project_id") 
    public Project getProject() { 
     return project; 
    } 

public void setProject(Project project) { 
     this.project = project; 
    } 
//other getters/ setters 
} 

Здесь я хочу упорствовать проекта но донорства, а также. .. Но сейчас он не работает (((только проекты таблица заполнена не пожертвования таблицы Можно ли сохраняться их одновременно - пожертвования стол заправить, когда проекты заполнены

Main?. Java

public class Main { 
    public static void main(String[] args) { 
     ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml"); 
     SessionFactory sessionfactory = (SessionFactory) context.getBean("sessionFactory"); 
     Session session = sessionfactory.getCurrentSession(); 
     Transaction tx = session.beginTransaction(); 
     Donation donation = new Donation(10000, 50); 
     Project project1 = new Project("sport arena", "arena in Kiev", donation); 
     session.persist(project1);//only projects table is persisted. Not donations. 
} 

В пожертвования таблицы внешний ключ столбец donation_project_id. В проекты - первичный ключ project_id.

ответ

1

Вам нужно добавить тип каскада в аннотации, как это:

@OneToOne(cascade = CascadeType.PERSIST) 
@JoinColumn(name = "project_id") 
public DonationLogic getDonation() { 
    return donation; 
} 

Hibernate documentation about it

UPDATE:

В двунаправленной ассоциации, одна сторона из соотношения должен владеть ассоциацией. This is a good example.

+0

Спасибо, Билл. Это почти работает. Однако столбец donation_project_id каким-то образом null (((я не могу заполнить внешний ключ (( – ovod

+0

) Я обновил свой ответ, если вы его не получите, я напишу код. –

+0

Нет, я вам ответ. проблема в том, что donation_project_id из таблицы пожертвований имеет значение null. – ovod

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