2015-09-25 41 views
0

我有下一种情况。我有POJO类:休眠正确启动OneToOne对象

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

     public Donation donation; 

     public Project() {} 
     public Project(int param1, int param2 ...) { 
      ...//other field initialisied 
      donation = new Donation(param1, param2); 
     } 

     //methods 

     @OneToOne 
     @JoinColumn(name = "donation_project_id") 
     public Donation getDonation() { 
      return donation; 
     } 
    } 

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

捐赠类:

@Entity 
@Table(name="donation") 
public class Donation { 

     public Donation() {} 

     public DonationLogic(int param1, int param2) { 
      //initialisation 
     } 
     //other methods 
} 

项目表/类继电器一些参数到另一个表/类捐赠。两个类是实体。我使用Spring + Hibernate。我的问题是,如果我正确地启动类捐赠这是在的项目类的构造函数中创建的?我觉得在Spring里使用新的运算符味道不好。也许有另一种方式来完成这项任务? - 创建由另一个表/类填充的类/表。也许单独的两个类的参数,并不使用一个构造函数来启动类?但是使用捐赠类的setters?但是,如果我有很多的参数,很多制定者,我会需要使用(((HMM((

+0

Hibernate对所有的持久类 – leeor

+0

对不起一个无参数的构造函数。我的错。我忘了错误的构造函数。但你不明白我的问题。编辑的问题。 – ovod

回答

0

我认为使用新的运营商内部的弹簧味道不好。

不是真的。但是,不管怎样,你在@Entity类和整个模型层不应该使用new相反的,你应该移到new到服务层,因为现在它看起来像业务逻辑是实体类

回到你的问题:你应该更好地重新考虑你的应用程序架构。正如我所说,new op erator不应该在模型层和@Entity类中使用。您正在创建新的bean,因此它看起来像是一些逻辑操作。因此,将此操作移至@Service类,并使用@Repository作为DAO访问对持久性对象的基本操作。您的DAO将支持并处理@OneToOne注释,而无需在您的实体bean中编写new

有用的链接:Effective pattern for data access with JPA