Java 在Spring中定义@ManyToOne关系后,如何访问基础列?

Java 在Spring中定义@ManyToOne关系后,如何访问基础列?,java,spring,hibernate,spring-roo,spring-data-jpa,Java,Spring,Hibernate,Spring Roo,Spring Data Jpa,我正在使用Spring3.2和Roo1.2.3,通过Hibernate构建一个数据库支持的Java应用程序。我的数据库中的表之间有几个双向的OneToMany/manytone关系。当我使用@JoinColumn(通过Roo中的“字段引用”)设置关系的多个单侧时,将创建一个类型为相关实体(多个单侧中的“一”)的新字段。但是,一旦完成此操作,似乎就无法访问manytone关系所基于的基础列值。如果基础联接列包含应用程序所需的数据(即联接列包含产品库存编号),则会出现此问题 是否有任何方法可以设置我

我正在使用Spring3.2和Roo1.2.3,通过Hibernate构建一个数据库支持的Java应用程序。我的数据库中的表之间有几个双向的OneToMany/manytone关系。当我使用@JoinColumn(通过Roo中的“字段引用”)设置关系的多个单侧时,将创建一个类型为相关实体(多个单侧中的“一”)的新字段。但是,一旦完成此操作,似乎就无法访问manytone关系所基于的基础列值。如果基础联接列包含应用程序所需的数据(即联接列包含产品库存编号),则会出现此问题

是否有任何方法可以设置我的实体类,使其多通关系所基于的列保持可访问性,而无需遍历新的联接属性?如何为该列的值定义访问器方法


我已经在网上寻找这个问题的答案好几天了,但都没有结果。提前感谢您的帮助。

只需使用insertable=false和updateable=false第二次映射该列,使其更加具体。可以执行HQL-SELCT并限制多通关系,而不在生成的SQL中进行任何连接

而不是使用联接

session.createQuery(“来自Person,其中Person.address.id=42”)
我们可以使用
address\u id

session.createQuery(“来自Person,其中Person.adressId=42”)
如果您指定一个附加的
adressId
字段,该字段仅用作Hibernate的映射信息,则此选项有效:

@实体
@访问权限(AccessType.FIELD)
公共阶层人士{
@身份证
字符串id;
@JoinColumn(name=“address\u id”)
@manytone(fetch=FetchType.LAZY)
@可空
公共地址;
@列(name=“address\u id”,insertable=false,updateable=false)
私有字符串地址;
}
@实体
@访问(字段)
公共类地址{
@身份证
字符串id;
}
不需要
AccessType.FIELD
(但我们可以在示例中保留getter/setter)。
FetchType.LAZY
@Nullable
也是可选的,但是在使用它有意义时要明确。我们能够加载具有特定
地址的
个人
实体(我们知道地址id)。但是我们不需要连接,因为WHERE子句和初始获取都不需要连接(地址可以惰性地获取)