我第一次使用SQLAlchemy并且想知道......一般来说,在使用SQLAlchemy vs id(主键)相等时,依赖python的默认等式语义是否足够?
在我以前使用ORM技术(如Java的Hibernate)工作的其他项目中,我们总是覆盖.equals()以检查对象的主键/ id是否相等,但是当我回头看时我不确定这个总是必要的.
在大多数情况下(如果不是所有情况)我都能想到,您只有一个具有给定id的给定对象的引用.并且该对象始终是附加对象,因此从技术上讲,您可以通过引用相等而逃脱.
简短的问题:在使用SQLAlchemy时,我是否应该为我的业务实体重写eq()和hash()?
我是一个Java EE/EJB noob,但是从我收集的文档和其他帖子中,您无法在实体验证期间使用相同的entitymanager/session查询数据库.
通常,可移植应用程序的生命周期方法不应调用EntityManager或Query操作,访问其他实体实例或修改同一持久化上下文中的关系.[43] 生命周期回调方法可以修改调用它的实体的非关系状态.
翻译好吗?
这很抽象......可以用更具体的术语来解释吗?它导致的问题多于答案.例如,如果我的实体有一个延迟加载的集合,我可以在验证期间访问它吗?该集合是"另一个实体",需要数据库查询,这似乎违反了文档.
这种"生命周期要求"似乎很奇怪,因为某些验证确实需要查询数据库才是生活中的事实.
从其他帖子我也看到人们通过使用entitymanagerfactory创建一个新的entitymanager/session来解决这个查询问题.
这引出了两个关于使用EntityManagers和Hibernate验证的问题:
我尝试过这样的事情:
@Stateless
public class UserValidator implements ConstraintValidator<ValidUser, User> {
@PersistenceUnit(unitName="blahblah")
EntityManagerFactory emf;
...
}
Run Code Online (Sandbox Code Playgroud)
但EMF永远不会注入.我猜测@Stateless标签变得无关紧要,因为我正在实现一个ConstraintValidator接口,这是Hibernate Validator工作所需要的.
那么从Validator获取EntityManagerFactory的一般模式是什么?
谢谢!
我知道有很多关于javahl问题的Eclipse/Subclipse问题.我一直在使用Eclipse/Subclipse很长一段时间没有javahl问题.
我现在遇到了同样的问题.
我刚刚升级到Java 7:
$ java -version
java version "1.7.0_65"
Java(TM) SE Runtime Environment (build 1.7.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
Run Code Online (Sandbox Code Playgroud)
我还升级到Eclipse Luna 4.4.0并安装了Subclipse.但是在创建远程存储库并尝试在SVN Repository Exploring透视图中浏览它之后,我在Eclipse .log错误日志文件中看到了这一点:
java.lang.NoClassDefFoundError: Could not initialize class org.apache.subversion.javahl.SVNClient
at org.tigris.subversion.svnclientadapter.javahl.JhlClientAdapter.<init>(JhlClientAdapter.java:57)
at org.tigris.subversion.clientadapter.javahl.Activator.getAdapter(Activator.java:64)
at org.tigris.subversion.clientadapter.Activator.getClientAdapter(Activator.java:70)
at org.tigris.subversion.subclipse.core.SVNClientManager.getAdapter(SVNClientManager.java:127)
at org.tigris.subversion.subclipse.core.SVNClientManager.getSVNClient(SVNClientManager.java:94)
at org.tigris.subversion.subclipse.core.SVNProviderPlugin.getSVNClient(SVNProviderPlugin.java:462)
at org.tigris.subversion.subclipse.core.repo.SVNRepositoryLocation.getSVNClient(SVNRepositoryLocation.java:257)
at org.tigris.subversion.subclipse.core.resources.RemoteFolder.getMembers(RemoteFolder.java:164)
at org.tigris.subversion.subclipse.core.resources.RemoteFolder.members(RemoteFolder.java:260)
at org.tigris.subversion.subclipse.ui.operations.FetchMembersOperation.execute(FetchMembersOperation.java:41)
at org.tigris.subversion.subclipse.ui.operations.SVNOperation.run(SVNOperation.java:90)
at org.tigris.subversion.subclipse.ui.repository.model.SVNRepositoryRootElement.fetchDeferredChildren(SVNRepositoryRootElement.java:73)
at org.eclipse.ui.progress.DeferredTreeContentManager$1.run(DeferredTreeContentManager.java:238)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Run Code Online (Sandbox Code Playgroud)
请参见下面的图片,查看我使用Subclipse安装的组件:
关于SVNKit客户端适配器(不需要),我已经安装了Subclipse,无论是否选择了这个组件,在这两种情况下我都看到了相同的javahl.SVNClient错误.
我该如何解决这个问题?
顺便说一句,我想也许我会给Subversive一个机会.Eclipse 4.4 udpates软件站点(http://download.eclipse.org/eclipse/updates/4.4)中没有Subversive,所以我尝试了Eclipse Marketplace Client.通过市场安装我收到以下错误:
The following solutions are not …
Run Code Online (Sandbox Code Playgroud) 我正在尝试做一些浏览器对象发现,搞清楚浏览器内置等...
当我试图获取窗口对象的属性时,我注意到了不同的结果(仅供参考,我使用的是Chrome版本41.0.2272.89(64位)).
Object.keys(window).length;
Run Code Online (Sandbox Code Playgroud)
返回7个键.从文档Object.keys()返回对象的可枚举属性.
但是文档也说for ... in
迭代了对象的可枚举属性.然而:
var i = 0;
for (var propertyName in window) {
i++;
}
Run Code Online (Sandbox Code Playgroud)
返回177的计数.
为什么会有所不同?他们不应该只返回可枚举属性的数量吗?
我正在使用Arquillian,JBoss,JPA/Hibernate,H2 DB和Maven运行测试.在我的测试persistence.xml文件中,我有:
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.show_sql" value="true" />
Run Code Online (Sandbox Code Playgroud)
现在我有一个User类通过Hibernate注释映射到'users'表.
事情几乎正常.问题是Hibernate试图执行:
drop table my_schema.users if exists
Run Code Online (Sandbox Code Playgroud)
但架构"my_schema"不存在,因此失败(毕竟我正在对内存数据库运行).
如何让hibernate执行似乎忘记的'create schema my_schema'步骤?
更新: 我从Hibernate看到的消息:
09:42:45,402 INFO [org.jboss.as.jpa] (MSC service thread 1-7) JBAS011402: Starting Persistence Unit Service 'test.war#ccmc'
09:42:45,524 INFO [org.hibernate.annotations.common.Version] (MSC service thread 1-7) HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
09:42:45,532 INFO [org.hibernate.Version] (MSC service thread 1-7) HHH000412: Hibernate Core {4.0.1.Final}
09:42:45,535 INFO [org.hibernate.cfg.Environment] (MSC service thread 1-7) HHH000206: hibernate.properties not found
09:42:45,542 INFO [org.hibernate.cfg.Environment] (MSC service thread 1-7) HHH000021: Bytecode provider …
Run Code Online (Sandbox Code Playgroud) 我得到了无限摘要循环的基本概念以及它是如何发生的,但我遇到了问题.这是一个演示我的代码和问题的小提琴:
在jsfiddle控制台中,您将看到无限的摘要循环.
基本上我必须对可能尚未加载的数据做出决定,所以我需要等待使用then()解析的承诺.我有一个叫做用户的承诺.代码中有两个不同的地方,我在用户上调用then().
对于数字2,可能会问为什么我不直接在$ scope.isAdmin()方法中使用$ scope.user.问题是,在用户的异步请求返回之前,可以调用$ scope.isAdmin(),在这种情况下,我需要在从$ scope.isAdmin()返回之前"阻塞".
我的问题是,$ scope.isAdmin()是什么让角度认为"观察"变量已经改变并且摘要周期需要再次运行?
$ scope.isAdmin()实际上并没有改变任何东西.
这是精简代码:
HTML:
<body ng-controller='myController'>
<div ng-if='isAdmin()'>Hi! <strong>{{ user.username }}</strong> is an Admin!!!</div>
<div ng-if='!isAdmin()'>Hi! <strong>{{ user.username }}</strong> is NOT an Admin!!!</div>
</body>
Run Code Online (Sandbox Code Playgroud)
和JS:
angular.module('myApp', [])
.factory('myService', function($q, $timeout) {
return {
getUser: function() {
var deferred = $q.defer();
$timeout(function() {
deferred.resolve({ username: 'me', isAdmin: true });
}, 2000);
return deferred.promise;
}
};
})
.controller('myController', function($scope, $q, myService) {
var getUserDeferred = $q.defer();
var user …
Run Code Online (Sandbox Code Playgroud) 这可能是一个全新的问题......抱歉,但我无法理解它。
在许多角度文档/示例中,我看到包含在“超时”块中的异步函数。许多都包含在 setTimeout() 中并且需要显式使用
if (!$scope.$$phase) {
$scope.$apply();
}
Run Code Online (Sandbox Code Playgroud)
鉴于 angular 提供了 $timeout,上面的代码似乎已经过时或错误,在 angular 内,应该始终首选使用 $timeout。不过,我离题了。
以下是一些示例代码的片段:http : //markdalgleish.com/2013/06/using-promises-in-angularjs-views/
var myModule = angular.module('myModule', []);
// From this point on, we'll attach everything to 'myModule'
myModule.factory('HelloWorld', function($timeout) {
var getMessages = function(callback) {
$timeout(function() {
callback(['Hello', 'world!']);
}, 2000);
};
return {
getMessages: getMessages
};
});
Run Code Online (Sandbox Code Playgroud)
我在任何与异步调用相关的超时块中都看到了这种代码包装。但是有人可以解释为什么需要这样做吗?为什么不把上面的代码改成:
var myModule = angular.module('myModule', []);
// From this point on, we'll attach everything to 'myModule'
myModule.factory('HelloWorld', function() {
var getMessages = function(callback) { …
Run Code Online (Sandbox Code Playgroud) Flask-SQLAlchemy 对 SQLAlchemy 反射的支持似乎不太适合我。我有一个观点my_view
想通过 进行反思autoload
。
但我想my_view
成为一个丰富的对象并具有各种功能,所以我想my_view
子类化db.Model
。我希望它像任何其他非视图的数据库模型一样工作。
我这样做:
class MyView(db.Model):
__tablename__ = 'my_view',
__table_args__ = (
db.UniqueConstraint('id', 'start_date'),
{
'autoload': True,
'autoload_with': db.engine
}
)
...my column defs...
...extra functionality...
Run Code Online (Sandbox Code Playgroud)
但在应用程序引导期间我收到错误:
<snip>
File "env/lib/python3.4/site-packages/sqlalchemy/dialects/postgresql/base.py", line 2325, in get_columns
info_cache=kw.get('info_cache'))
File "<string>", line 2, in get_table_oid
File "env/lib/python3.4/site-packages/sqlalchemy/engine/reflection.py", line 54, in cache
ret = fn(self, con, *args, **kw)
File "env/lib/python3.4/site-packages/sqlalchemy/dialects/postgresql/base.py", line 2223, in get_table_oid
raise exc.NoSuchTableError(table_name)
sqlalchemy.exc.NoSuchTableError: ('my_view',)
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用它db.Table
而不是db.Model …
CORS设置如何与Angular的XSRF保护一起使用?绝对URL只是被忽略,但我也需要XSRF来处理绝对URL.这不应该配置HttpClientXsrfModule.withOptions()
吗?这似乎是代码中的疏忽.
具体来说,我在Angular代码中看到了这一点:
https://github.com/angular/angular/blob/master/packages/common/http/src/xsrf.ts#L77-L84
// Skip both non-mutating requests and absolute URLs.
// Non-mutating requests don't require a token, and absolute URLs require special handling
// anyway as the cookie set
// on our origin is not the same as the token expected by another origin.
if (req.method === 'GET' || req.method === 'HEAD' || lcUrl.startsWith('http://') ||
lcUrl.startsWith('https://')) {
return next.handle(req);
}
Run Code Online (Sandbox Code Playgroud) 我有一个打字稿项目,而不是tsc
首先使用,我只是ts-node
直接运行通过。
在我的代码中,我需要使用fork()
.
如果我喜欢运行的代码child_process.fork('ChildProcess.ts')
,并ChildProcess.ts
包含一些打字稿只有结构(如:import {}
,export
,...),然后解释之中node
,而不是ts-node
将失败。
可能建议使用类似的东西child_process.exec('node ./node_modules/.bin/ts-node ChildProcess.ts)
,但我真的想要/需要在父进程和子进程之间设置的 IPC 通信通道,当fork()
专门使用时。
关于如何实现这一目标的任何想法?
谢谢!