有时,您必须使用本机SQL编写一些查询,而不是休眠HQL。有什么好方法可以避免对表名和字段进行硬编码,并从现有映射中获取此数据?
例如,代替:
String sql = "select user_name from tbl_user where user_id = :id";
Run Code Online (Sandbox Code Playgroud)
就像是:
String sql = "select " + Hibernate.getFieldName("user.name") + " from " + Hibernate.getTableName(User.class) + " where " + Hibernate.getFieldName("user.id") + " = :id";
Run Code Online (Sandbox Code Playgroud) 我根据这篇文章实现了Spring + Hibernate的Dynamic DataSource Routing .我有几个具有相同结构的数据库,我需要选择哪个数据库将运行每个特定的查询.
在localhost上一切正常,但我担心这将如何在真正的网站环境中保持.他们使用一些静态上下文持有者来确定要使用的数据源:
public class CustomerContextHolder {
private static final ThreadLocal<CustomerType> contextHolder =
new ThreadLocal<CustomerType>();
public static void setCustomerType(CustomerType customerType) {
Assert.notNull(customerType, "customerType cannot be null");
contextHolder.set(customerType);
}
public static CustomerType getCustomerType() {
return (CustomerType) contextHolder.get();
}
public static void clearCustomerType() {
contextHolder.remove();
}
}
Run Code Online (Sandbox Code Playgroud)
它被包装在一些ThreadLocal容器中,但究竟是什么意思呢?当两个Web请求并行调用此代码时会发生什么:
CustomerContextHolder.setCustomerType(CustomerType.GOLD);
//<another user will switch customer type here to CustomerType.SILVER in another request>
List<Item> goldItems = catalog.getItems();
Run Code Online (Sandbox Code Playgroud)
是否每个Web请求都包装在Spring MVC中的自己的线程中?将CustomerContextHolder.setCustomerType()
变化是其他网络用户看到?我的控制器有synchronizeOnSession=true
.
如何在我为当前用户运行所需查询之前确保没有其他人切换数据源?
谢谢.
我希望在页面操作或浏览器操作弹出窗口关闭时触发一些代码.我试着聆听onunload
和onbeforeunload
事件的<body>
或window
,但他们从来不火.
我正在制作一个 chrome 扩展,它在用户登录时设置一个 cookie。当我尝试使用该chrome.cookies.get()
方法读取 cookie 时,回调可以记录结果,但我无法将其从回调中传递出去。
function getCookie (cookieName){
var returnVal;
chrome.cookies.get({
'url':'https://addictedtogether.com/',
'name':cookieName
},
function(data){
console.log(data); //log displays returned cookie in a object
returnVal=data;
}
);
console.log(returnVal); //log says this is undefined
return returnVal;
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用几种不同的方式来传递结果,但似乎对象是未定义的,除非它是从回调中调用的。
我有基本的休息框架设置:
url(r'^items/$', ItemList.as_view(), name='item-list'),
...
class ItemList(generics.ListCreateAPIView):
model = Item
serializer_class = ItemSerializer
Run Code Online (Sandbox Code Playgroud)
我想使用@cache_page
装饰器缓存此请求.我尝试过像愚蠢的东西:
url(r'^items/$', cached_items, name='item-list'),
...
@cache_page(1000)
def cached_items(request):
return ItemList.as_view()
Run Code Online (Sandbox Code Playgroud)
这不起作用.如何正确包装这些视图?
MyModel.objects.filter(name="my name", date__lte=datetime.now()).query
Run Code Online (Sandbox Code Playgroud)
输出:
SELECT "mymodel"."id", "mymodel"."name", "mymodel"."date"
FROM "mymodel"
WHERE ("mymodel"."name" = my name AND "mymodel"."date" <= 2016-02-24 20:24:00.456974+00:00)
Run Code Online (Sandbox Code Playgroud)
这不是有效的SQL(未引用过滤器参数)。
我如何获取将要执行的确切SQL,即:
SELECT "mymodel"."id", "mymodel"."name", "mymodel"."date"
FROM "mymodel"
WHERE ("mymodel"."name" = 'my name' AND "mymodel"."date" <= '2016-02-24 20:24:00.456974+00:00'::timestamptz)
Run Code Online (Sandbox Code Playgroud) 我有3个字段的"任务"表:
我想要实现的是整个表按完成标记排序,未完成的任务应按优先级排序,而完成的任务应按日期排序:
没有工会可以在MySQL中执行此操作吗?
谢谢.
由于一些奇怪的原因,我无法在textarea中捕获Ctrl+ Alt+ Arrow组合键.它是某种被Windows吞噬的系统热键吗?Ctrl+ Alt+ Any Letter和Ctrl+ Alt+ Shift+ Arrow被捕获得很好.
$(document).ready(function() {
$("textarea").bind("keydown", function(event) {
console.log(event);
if(event.altKey && event.ctrlKey && event.which == 38) {
console.log("ctrl+alt+up"); //never triggered
}
});
});
Run Code Online (Sandbox Code Playgroud)
当按下Ctrl+ Alt+时Any Letter,我在控制台中看到所有3个事件.当按下Ctrl+ Alt+时Arrow,我只看到2个事件(for Ctrl和Alt).
有任何想法吗?
我正在尝试创建每个人都可以看到的专辑:
FB.api("/me/albums", "post", {
name: "album name", privacy: '{"value":"EVERYONE"}'
}, function(response) {
//...
});
Run Code Online (Sandbox Code Playgroud)
但它是通过friends
隐私创建的.
文件说这个privacy
领域是:
一个JSON编码的对象,用于定义相册的隐私设置,例如:{"value":"SELF"}
value:对象的隐私值,指定EVERYONE,CUSTOM,ALL_FRIENDS,NETWORKS_FRIENDS,FRIENDS_OF_FRIENDS,SELF之一.
我试过'{"value":"EVERYONE"}'
,{"value":"EVERYONE"}
,{value:"EVERYONE"}
-没有影响.这是一个错误还是我遗失了什么?
我正在尝试为谷歌浏览器创建一个扩展.我正在监视页面文本选择,我希望弹出页面在我单击弹出按钮时接收所选文本.
有没有办法将变量传递给弹出窗口?我明白,这种混乱对于封闭的弹出窗口不起作用,所以我该怎么办?