小编ili*_*den的帖子

Hibernate - 外键而不是实体

目前,Hibernate允许我直接加载由*-to-one关系定义的对象

entity1.getEntity2()
Run Code Online (Sandbox Code Playgroud)

是否可以获取外键而不是对象?

我看到的当前方法是对我的映射添加addint:

@JoinColumn(name="message_key")
@ManyToOne(targetEntity=Message.class,fetch=FetchType.LAZY)
private Message message;  //these lines currently exist

@Column(name="message_key")
private Long message_fk; //the idea is to add those 2 lines
Run Code Online (Sandbox Code Playgroud)

是否有更好的方法来获取外键,或者这是唯一的?

java mapping hibernate foreign-keys

45
推荐指数
3
解决办法
3万
查看次数

Hibernate saveOrUpdate行为

有没有人知道Hibernate在session.saveOrUpdate()调用时是如何知道INSERT还是更新数据库中的值?

到目前为止,我只确定它不依赖于缓存中的信息,并且数据库中实体的存在是由主键确定的.

java database hibernate

41
推荐指数
2
解决办法
8万
查看次数

使用hibernate从数据库中获取下一个序列值

我有一个具有NON-ID字段的实体,必须从序列中设置.目前,我获取序列的第一个值,将其存储在客户端,并从该值进行计算.

但是,我正在寻找一种"更好"的方式来做到这一点.我已经实现了一种获取下一个序列值的方法:

public Long getNextKey()
{
    Query query = session.createSQLQuery( "select nextval('mySequence')" );
    Long key = ((BigInteger) query.uniqueResult()).longValue();
    return key;
}
Run Code Online (Sandbox Code Playgroud)

但是,这种方式会显着降低性能(〜5000个对象的创建速度减慢了3倍 - 从5740ms减少到13648ms).

我试图添加一个"假"实体:

@Entity
@SequenceGenerator(name = "sequence", sequenceName = "mySequence")
public class SequenceFetcher
{
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequence")
    private long                      id;

    public long getId() {
        return id;
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,这种方法也不起作用(所有返回的Ids都是0).

有人可以告诉我如何有效地使用Hibernate获取下一个序列值吗?

编辑:经过调查,我发现调用的Query query = session.createSQLQuery( "select nextval('mySequence')" );效率远低于使用@GeneratedValue- 因为Hibernate 以某种方式设法减少访问所描述的序列时的提取次数@GeneratedValue.

例如,当我创建70,000个实体时(因此从同一序列中获取70,000个主键),我得到了我需要的一切.

但是,Hibernate只发出1404个 select nextval ('local_key_sequence') …

sql hibernate sequence nextval

31
推荐指数
3
解决办法
13万
查看次数

如何从python中的SQLite查询中获取单个结果?

在使用python 2.7时,是否有一种优雅的方法可以从SQLite SELECT查询中获取单个结果?

例如:

conn = sqlite3.connect('db_path.db')
cursor=conn.cursor()
cursor.execute("SELECT MAX(value) FROM table")

for row in cursor:
    for elem in row:
        maxVal = elem
Run Code Online (Sandbox Code Playgroud)

有没有办法避免那些嵌套的fors并直接获取值?我试过了

maxVal = cursor[0][0]
Run Code Online (Sandbox Code Playgroud)

没有任何成功.

python sql sqlite

29
推荐指数
3
解决办法
4万
查看次数

SQLite自动增加非主键字段

是否可以让非主键在每次插入时自动递增?

例如,我想要一个日志,其中每个日志条目都有一个主键(供内部使用)和一个修订号(我希望自动递增的INT值).

作为一种解决方法,这可以通过序列完成,但我相信SQLite不支持序列.

sql sqlite auto-increment

22
推荐指数
2
解决办法
2万
查看次数

Hibernate - HQL分页

这是一个类似于以下问题:HQL - 分页的行标识符

我正在尝试使用HQL实现分页.我有一个PostgreSQL数据库.

int elementsPerBlock = 10;
int page = 2; //offset = 2*10

String sqlQuery = "FROM Messages AS msg " +
                  " LEFT JOIN FETCH msg.commands AS cmd " +   
                  "ORDER BY msg.identifier ASC" ;

Query query = session.createQuery( sqlQuery )
                     .setFirstResult( elementsPerBlock * ( (page-1) +1 ) )
                     .setMaxResults( elementsPerBlock );
Run Code Online (Sandbox Code Playgroud)

会发生什么是Hibernate获取所有消息,并在它们全部加载后返回所需的消息.

因此,Hibernate获取210000个实体而不是返回的30个实体(每个Messages只有2个命令).

有没有办法将开销减少7000倍?

编辑:我尝试添加 .setFetchSize( elementsPerBlock ) .它没有帮助.

编辑2:生成的SQL查询是:

select ... 
from schemaName.messages messages0_ 
left outer join schemaName.send_commands commands1_ 
on messages0_.unique_key=commands1_.message_key 
order by messages0_.unique_identifier …
Run Code Online (Sandbox Code Playgroud)

pagination hibernate hql

19
推荐指数
2
解决办法
3万
查看次数

hibernate支持延迟约束?

在Hibernate 3.6中,对延迟约束的支持是什么?

正如我所知,在3.2中,"Hibernate不支持延迟约束." (来自http://opensource.atlassian.com/projects/hibernate/browse/HHH-2248)

sql hibernate constraints

10
推荐指数
1
解决办法
892
查看次数

hibernate - HQL加入了许多子句

我一直在阅读Hibernate文档,但我没有找到任何可以解释如何执行以下操作的内容.

我有以下我想要转换为HQL的SQL代码:

SELECT {msg.*}, {cmd.*} 
FROM Schema.Messages AS msg 
  LEFT OUTER JOIN schema.send_commands AS cmd 
    ON cmd.message_key = msg.unique_key 
    AND ( lower(cmd.status) IN (lower('failed') ) ) 
WHERE msg.sequence_received < 10";
Run Code Online (Sandbox Code Playgroud)

我遇到的主要问题是我在LEFT OUTER JOIN上没有两个条款.HQL允许我拥有 ON cmd.message_key = msg.unique_key ,但我如何添加 AND clause 2?

sql hibernate hql left-join

9
推荐指数
1
解决办法
2万
查看次数

javascript开关/案例:类型比较?

可能重复:
在Javascript switch语句中假设严格比较是否安全?

javascript中的switch/case语句是比较类型还是仅比较值?

换句话说,当我有以下代码时:

switch (variable)
{
    case "0": [...] break;
    case "1": [...] break;
    default: [...] break;
}
Run Code Online (Sandbox Code Playgroud)

它等同于

if ( variable == "0" )
{
    [...]
}
else if ( variable == "1" )
{
    [...]
}
else
{
    [...]
}
Run Code Online (Sandbox Code Playgroud)

或者

if ( variable === "0" )
{
    [...]
}
else if ( variable === "1" )
{
    [...]
}
else
{
    [...]
}
Run Code Online (Sandbox Code Playgroud)

编辑:有没有办法强制比较值和类型?

javascript

8
推荐指数
1
解决办法
3471
查看次数

python sqlite字符串插入

我正在尝试使用python将作为参数接收的字符串插入到sqlite数据库中:

    def addUser(self, name):

            cursor=self.conn.cursor()
            t = (name)
            cursor.execute("INSERT INTO users ( unique_key, name, is_online, translate) VALUES (NULL, ?, 1, 0);", t)
            self.conn.commit()
Run Code Online (Sandbox Code Playgroud)

我不想使用字符串连接,因为http://docs.python.org/library/sqlite3.html建议不要使用它.

但是,当我运行代码时,我得到了异常

cursor.execute("INSERT INTO users ( unique_key, name, is_online, translate) VALUES (NULL, ?, 1, 0);", t)
pysqlite2.dbapi2.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 7 supplied
Run Code Online (Sandbox Code Playgroud)

为什么Python按字符分割字符串,有没有办法阻止它这样做?

编辑:

更改为t = (name,) 给出以下异常

print "INSERT INTO users ( unique_key, name, is_online, translate) VALUES (NULL, ?, 1, 0)" + t …
Run Code Online (Sandbox Code Playgroud)

python sqlite

6
推荐指数
1
解决办法
3640
查看次数