我有一个hibernate和JSF2应用程序进入部署服务器并突然在异常中抛出org.hibernate.AssertionFailure:null id.我将立即提供堆栈跟踪和代码,但这里首先是四个重要问题:
这只发生在部署服务器上(在Windows Sever 2008上运行的Jboss和MySql).它不会发生在我的开发机器上(在Windoes 7 Pro上运行的Tomcat和MySql),也不会发生在暂存环境中(在Linux上运行的Jboss和MySql) .)
研究这个,似乎人们在尝试插入对象时会出现此错误.但是当我做一个简单的查询时,我得到了错误.(实际上,各种不同的查询随机地在几个页面上弹出错误.)
错误只会偶尔出现.如果我做Jboss重启它会消失,但一段时间后会返回.此外,它不一致,有些点击它在那里,而其他人则没有.即使它命中,当我对页面进行简单的刷新时它也会返回.
我正在使用c3p0(下面的配置)
知道发生了什么事吗?
代码详情:
这发生在地址对象上.这是完整的hbm:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.idex.auctions.model">
<class name="Address" table="address" lazy="true">
<id name="addressID" column="AddressID">
<generator class="native"/>
</id>
<property name="street" column="street"/>
<property name="city" column="city"/>
<property name="zip" column="zip"/>
<property name="state" column="state"/>
<property name="region" column="region"/>
<property name="country" column="country"/>
<many-to-one name="user"
class="com.idex.auctions.model.User"
column="userid"
unique="true"
cascade="save-update"/>
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
Java类是直截了当的:
public class Address implements Serializable {
private static final long serialVersionUID = 7485582614444496906L;
private long addressID;
private …Run Code Online (Sandbox Code Playgroud) 我遇到了麻烦.我的代码如下.但我不知道为什么在输出字符串"Hello Python"之前有一个char'b'.
>>> import redis
>>> redisClient = redis.StrictRedis(host='192.168.3.88',port=6379)
>>> redisClient.set('test_redis', 'Hello Python')
True
>>> value = redisClient.get('test_redis')
>>> print(value)
b'Hello Python' //why char 'b' output?
Run Code Online (Sandbox Code Playgroud) 当我运行此代码时:
struct X {
int a;
};
struct Y : public X {};
X x = {0};
Y Y = {0};
Run Code Online (Sandbox Code Playgroud)
我明白了:
error: could not convert ‘{0}’ from ‘<brace-enclosed initializer list>’ to ‘Y’
Run Code Online (Sandbox Code Playgroud)
为什么大括号初始化适用于基类而不适用于派生类?
一位开发人员建议我们将一周中的选择日期存储为7个字符的1和0字符串,即周一和周五的"1000100".我更喜欢(强烈建议)一个带有Flags枚举和按位操作的解决方案,我认为这是一种更简洁的方法,对其他开发人员应该更容易理解.
[Flags()]
public enum Weekdays : int
{
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
Saturday = 32,
Sunday = 64
}
Run Code Online (Sandbox Code Playgroud)
然而,当我开始实现一个示例解决方案时,我意识到简单的字符串方法可能更容易:当然,如果您只是查看数据,则位串比"17"更明显.我发现C#按位运算反直觉且非常冗长:
Weekdays workDays = Weekdays.Monday | Weekdays.Tuesday;
if ((workDays & Weekdays.Monday) == Weekdays.Monday)
{...}
Run Code Online (Sandbox Code Playgroud)
当然,这可以很好地包含在扩展方法中,但是我们突然最终得到的代码行数与字符串解决方案的数量相同,我几乎不能认为按位代码更容易阅读.
话虽这么说,我仍然会使用标志枚举和按位操作.我能想到的主要好处是
那么我如何向同事出售逐位解决方案呢?我是不是该?使用此方法比字符串有什么其他好处?完成示例项目后,我发现团队仍然选择了基于字符串的解决方案.我需要一些更好/更强的论点.为什么要使用Flags枚举而不是简单的位串?
我想知道将tables用于表单是否可以接受.
严格来说,名称/值对是表格数据,不是吗?表单只是一组用户可自定义的名称/值对.那么table在这种情况下使用s 是否正确?或者我应该使用divCSS样式?
有没有办法指定一个默认的构造函数enum class?
我使用an enum class来指定一组允许库中特定数据类型的值:在这种情况下,它是Raspberry Pi的GPIO引脚ID号.它看起来像这样:
enum class PinID : int {N4 = 4, N17 = 17, /* ...etc... */ }
我这样做而不仅仅是使用一个int是确保代码是安全的:我可以static_assert(或者编译时确保 - 实际使用的方法对我来说并不重要)像有人没有这样的东西发出拼写错误(传递5而不是4等),我得到类型不匹配的自动错误消息等.
那么问题就是enum class有一个默认的构造函数 - 为了兼容性而enum我假设(因为它们具有相同的行为) - 初始化为enum class等效的0.在这种情况下,没有0价值.这意味着用户做出如下声明/定义:
PinID pid = PinID();
正在获取一个未明确定义的枚举器(当查看代码时甚至看起来"不存在"),并且可能导致运行时错误.这也意味着switch如果没有错误/默认情况,我就不可能使用明确定义的枚举器的值这样的技术- 这是我想要避免的,因为它会强迫我执行throw或执行类似返回a的操作boost::optional,这些操作不太适合静态分析.
我试图定义默认构造函数无济于事.我(拼命)试图定义一个共享名称的函数enum class,但这(不出所料)导致奇怪的编译器错误.我想保留铸的能力enum class到int,与所有N#统计员映射到它们各自的#,所以仅仅是"定义",比方说,N4 = 0是不可接受的; 这是为了简单和理智.
我想我的问题是双重的:有没有办法获得我使用后的静态安全性enum class?如果没有,还有什么其他可能性?我想要的是: …
如果我有这两个列表:
la = [1, 2, 3]
lb = [4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
我可以按如下方式迭代它们:
for i in range(min(len(la), len(lb))):
print la[i], lb[i]
Run Code Online (Sandbox Code Playgroud)
或者更诡异
for a, b in zip(la, lb):
print a, b
Run Code Online (Sandbox Code Playgroud)
如果我有两本词典怎么办?
da = {'a': 1, 'b': 2, 'c': 3}
db = {'a': 4, 'b': 5, 'c': 6}
Run Code Online (Sandbox Code Playgroud)
再次,我可以手动迭代:
for key in set(da.keys()) & set(db.keys()):
print key, da[key], db[key]
Run Code Online (Sandbox Code Playgroud)
是否有一些内置方法允许我迭代如下?
for key, value_a, value_b in common_entries(da, db):
print key, value_a, value_b
Run Code Online (Sandbox Code Playgroud) 我有一段代码如下:
double ?t = lastPollTime - pollTime;
double ? = 1 - Math.exp(-?t / ?);
average += ? * (x - average);
Run Code Online (Sandbox Code Playgroud)
在Java标识符中使用unicode字符的想法有多糟糕?或者这完全可以接受?
在Lua中,似乎有两种方法可以将元素附加到数组:
table.insert(t, i)
Run Code Online (Sandbox Code Playgroud)
和
t[#t+1] = i
Run Code Online (Sandbox Code Playgroud)
我应该使用哪个,为什么?
c++ ×2
c++11 ×2
css ×2
python ×2
c# ×1
dictionary ×1
enum-class ×1
enum-flags ×1
forms ×1
hibernate ×1
html ×1
html-table ×1
identifier ×1
iterator ×1
java ×1
jboss ×1
jsf-2 ×1
less ×1
lua ×1
lua-table ×1
mysql ×1
redis ×1
struct ×1
unicode ×1
windows ×1