小编oct*_*cty的帖子

与共享主键的OneToOne关系生成n + 1个选择; 任何解决方法?

想象一下关系数据库中的2个表,例如Person和Billing.在这些实体之间定义了(非强制性)OneToOne关联,并且它们共享Person主键(即PERSON_ID在Person和Billing中定义,并且它是后者中的外键).

通过命名查询对Person进行选择时,例如:

from Person p where p.id = :id
Run Code Online (Sandbox Code Playgroud)

Hibernate/JPA生成两个选择查询,一个在Person表上,另一个在Billing表上.

上面的示例非常简单,并且不会导致任何性能问题,因为查询只返回一个结果.现在,假设PersonnOneToOne关系(均非强制性)与其他实体(所有共享Person主键).

如果我错了,请纠正我,但是select在Person上运行查询,返回r行,将导致(n+1)*rHibernate生成选择,即使这些关联是懒惰的.

是否存在针对此潜在性能灾难的解决方法(除了根本不使用共享主键)?谢谢你的所有想法.

java hibernate jpa

7
推荐指数
1
解决办法
5091
查看次数

在后台线程上接收CLLocation更新

我正在尝试使用iPhone SDK实现(非并发)NSOperation以进行位置更新.NSOperation子类的"肉"是这样的:

- (void)start {
    // background thread set up by the NSOperationQueue
    assert(![NSThread isMainThread]);

    if ([self isCancelled]) {
        return;
    }

    self->locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = self->desiredAccuracy;
    locationManager.distanceFilter = self->filter;
    [locationManager startUpdatingLocation];

    [self willChangeValueForKey:@"isExecuting"];
    self->acquiringLocation = YES;
    [self didChangeValueForKey:@"isExecuting"];
}

- (void)cancel {
    if ( ! self->cancelled ) {
        [self willChangeValueForKey:@"isCancelled"];
        self->cancelled = YES;
        [self didChangeValueForKey:@"isCancelled"];

        [self stopUpdatingLocation];
    }
}

- (BOOL)isExecuting {
    return self->acquiringLocation == YES;
}

- (BOOL)isConcurrent {
    return NO;
}

- …
Run Code Online (Sandbox Code Playgroud)

iphone core-location cllocationmanager

4
推荐指数
1
解决办法
2723
查看次数

标签 统计

cllocationmanager ×1

core-location ×1

hibernate ×1

iphone ×1

java ×1

jpa ×1