这是我的模型:
DummyB -> DummyA
以下是表格:
create table dummyA (
id number(18,0), --pk
name varchar2(20) -- unique field
);
create table dummyB (
id number(18,0),
dummya_id number(18,0),
dummya_name varchar2(20)
);
这些实体是:
@Entity
public class DummyA implements Serializable {
private Long id;
private String name;
@Id
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Entity
public class DummyB implements Serializable {
private Long id;
private DummyA dummyA;
@Id
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
/* Case 1: mapping DummyB -> DummyA by DummyA NON primary key (field name) */
// @ManyToOne(fetch = FetchType.LAZY)
// @JoinColumn(name = "dummya_id")
// public DummyA getDummyA() {
// return dummyA;
// }
/* Case 2: mapping DummyB -> DummyA by DummyA primary key */
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "dummya_name", referencedColumnName = "name")
@LazyToOne(LazyToOneOption.PROXY)
public DummyA getDummyA() {
return dummyA;
}
public void setDummyA(DummyA dummyA) {
this.dummyA = dummyA;
}
}
public class DummyTest {
@Autowired
HibernateTransactionManager transactionManager;
@Test
@Transactional
public void testFindDummyB() throws DAOException {
Long idDummyB = 2L;
Session sesshtml" target="_blank">ion = getCurrentHibernateSession();
List lst = session.createCriteria(DummyB.class)
.add(Restrictions.eq("id", idDummyB)).list();
assertTrue(lst.size() > 0);
}
private Session getCurrentHibernateSession() {
return this.transactionManager.getSessionFactory().getCurrentSession();
}
}
我得库:
其他我已经尝试过的事情:
谢谢你。
万一有人对此仍有问题,我们将其按以下方式工作:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "dummya_name", referencedColumnName = "name", insertable = false, updatable = false),
@LazyToOne(LazyToOneOption.NO_PROXY)
public DummyA getDummyA() {
if (fieldHandler != null) {
return (DummyA) fieldHandler.readObject(this, "dummyA", dummyA);
}
return dummyA;
}
public void setDummyA(DummyA dummyA) {
if (fieldHandler != null) {
this.dummyA = (DummyA ) fieldHandler.writeObject(this, "dummyA", this.dummyA, dummyA);
return;
}
this.dummyA= dummyA;
}
@Override
public void setFieldHandler(FieldHandler fieldHandler) {
this.fieldHandler = fieldHandler;
}
@Override
public FieldHandler getFieldHandler() {
return fieldHandler;
}
在Hibernate惰性加载中解释得很好,用于反向一对一的解决方案--这是如何工作的?
正如@Alina-Petukhova提到的,DummyB类必须实现FieldHandled接口。
我有两个表:和。 在类中,我声明了字段,如下所示: 当我获得列表时,也被加载(我看到了许多单独的SELECT查询)。但我希望是惰性加载的,而不是与一起提取的。 对于其他表,如果引用的列是主键,则结果与预期一样(使用懒惰加载)。在我的示例中,不是表的主键,并且Hibernate不使用惰性加载。 你能告诉我怎样实现那个目标吗?
我正在使用JPA2.1(Eclipselink2.5.1)和JBoss7.1。 为什么不工作是懒惰加载? 谢谢
我正在尝试< code>fetchType的示例。懒惰,但是在调试代码时,似乎< code>fetchType。懒惰不起作用。 实体bean:地址 添加了属性为fetch=fetchType的注释@Basic。懒散地在地区赛场上。 我的实体bean由以下代码定义: 使用上述实体 Bean 的方法: 因此,在方法调用之后,当我检查地址对象时,它已经填充了区域字段。 请让我知道我是否缺少某些配置,或者
如果您在一个表上的非空列上使用计数,而没有任何where部分,则优化器只需返回该表中的行数。 如果您要求对一个唯一的非空列(如主键)进行非重复计数,答案应该是相同的,但是这次mariadb代替了。 如果您在其他表上留下了联接,但仍然没有 where 部分,则结果仍应为该表中的行数。 Mariadb 不使用千次优化是有原因的吗?是否存在未过滤主键的 DISTINCT 计数可以给出任何其他结果,然后该
问题内容: 我在spring使用Hibernate。 我有这样的模型班。 它通常可以正常工作,但是Category不会延迟加载,而是在ForumEntry加载后急切加载。 `` 完全没有将getter称为ForumCategory是在ForumTopic之后立即加载的。 这个问题出现在我所有的@ManyToOne关联中。但是,@OneToMany关联会延迟加载。 我正在使用maven2进行构建。这
我有一个用户表,ID列作为主键。我有这个功能在控制器: 此函数不回显任何内容。如果我从$id更改为$name,如下所示: