2014-12-03 44 views
0

我目前是这样的:休眠:一对一的相关不相关的引用对象直接

public class Particle extends Entity 
{ 
    private Image image; 
    ... 

    @OneToOne(targetEntity = Image.class, cascade = CascadeType.ALL) 
    @JoinColumn(name = "imageId") 
    public Image getImage() { 
    return image; 
    } 
} 

这工作得很好,但由于其他处理,我需要在不引用对象相同。 所以我需要的其实是这样的:

public class Particle extends Entity 
{ 
    private int imageId; 
    ... 

    @OneToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "imageId") 
    public int getImage() { 
    return imageId; 
    } 
}  

很显然,我得到一个例外,它说,颗粒类引用了未知的实体。 有没有办法,只提供一个id作为FK图像,而不是直接设置对象? 在数据库表中,imageId已经是一个整数列。

回答

0

您可以通过使用@SecondaryTabledocumentation)做到这一点

这将是这个样子

@Entity 
@Table(name = "particle") 
@SecondaryTable(name = "image", [email protected](name="id", referencedColumnName="imageId")) 
public class Particle extends Entity { 
    ... 
    @Column(table="image", name="imageId") 
    public int getImageId() { 
     return imageId; 
    } 
} 
+0

THX了很多。我试过了,但它没有,我期望的。这会为Image对象添加一个新的约束,因为hibernate无法找到粒子。但也许我的问题还不够清楚,要说清楚。我希望能够在不提供粒子对象的情况下插入图像。但是如果我插入一个粒子对象,必须有一个图像来引用它。所以我认为在这种情况下One-to-One Mapping不适用。我怎么能做到这一点。 – user3880352 2014-12-03 13:55:37

+0

并且粒子对象中的图像对象应该只被定义为一个整数,正如问题所述。 – user3880352 2014-12-03 13:56:21