只是获取id列值而不是在hibernate对象中使用join一对多关系
我正在使用hibernate 4+。
我有两个样本表。
表A.
public class A { @Id private int id; @OneToMany(fetch=LAZY) private List list; // skip getter&setter }
表B.
public class B { @Id private int id; @ManyToOne(fetch=LAZY) @JoinColumn(name="b_id") private A a; // skip getter&setter }
表A(1) – (n)表B关系
我可以在对象B中获取A的id而不使用join吗?
比如int aid = b.getA()。getId(); // b是B的实例;
虽然我在声明类B时可以使用int值而不是A.但是另一个服务层使用A和join。
我可以获得id(fk)值吗?
请帮忙。
是的,因为无论如何代理都包含id。 要获取A
代理的id而不初始化它,首先声明要通过property访问的id:
@Entity public class A { @Id @Access(AccessType.PROPERTY) private int id; @OneToMany(fetch=LAZY) private List list; public int getId() { return id; } public void setId(int id) { this.id = id; } }
然后,只需读取ID:
b.getA().getId();
更改id的访问类型是必要的,因为如果使用字段访问,Hibernate不会将getId()
方法与其他普通方法(在调用时触发代理初始化getId()
区分开来。
我想你可以使用这篇文章: 属性访问策略
据说如果你只访问id,就不会触发延迟加载
您可以在B中定义两个字段,一个表示关系,另一个表示列:
@ManyToOne(fetch=LAZY) @JoinColumn(name="b_id") private A a; @Column(name="b_id", updatable=false,insertable=false) //Or correct column private int a_id;
这样您就可以从实体B访问实体A或只是A的ID。
- Java Hibernate和SQL Server中UUID的不同表示
- javax.persistence.PersistenceException:未找到类或包
- 如何在不获取OracleDB的“预期NUMBER但得到BINARY”的情况下查询Long值中的null?
- hibernate和inheritance(TABLE_PER_CLASS)
- Jersey,Guice和Hibernate – EntityManager线程安全
- 何时使用Spring JPA(Hibernate)实体管理器将连接返回到连接池?
- 使用Hibernate和Guice管理JavaSE中的事务
- hibernate查询语言还是使用标准?
- 创建JUnit测试时没有此类方法错误