如果我打开使用Javac生成调试信息,则类文件大20-25%.这对运行Java程序有任何性能影响吗?如果是,在哪些条件和多少.我希望对加载类有一点影响,因为文件较大但这应该是最小的.
在JPA中设置列的长度到底是做什么的?
@Column(name = "middle_name", nullable = false, length = 32)
public String getMiddleName() {
return this.middleName;
}
Run Code Online (Sandbox Code Playgroud)
我知道您可以使用注释来生成基于实体对象的数据库模式(DDL),但是当持久性发生时,长度是否会进行任何类型的检查或截断,还是仅用于模式创建?
我也意识到JPA可以放在各种实现之上,在这种情况下我关注的实现是Hibernate.
在我的SQL Server 2000数据库中,我有一个DATETIME名为lastTouchedset 的类型的时间戳(在函数中不在数据类型中)列getdate()作为其默认值/ binding.
我正在使用Netbeans 6.5生成的JPA实体类,并在我的代码中使用它
@Basic(optional = false)
@Column(name = "LastTouched")
@Temporal(TemporalType.TIMESTAMP)
private Date lastTouched;
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将对象放入数据库时,我得到了,
javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: com.generic.Stuff.lastTouched
Run Code Online (Sandbox Code Playgroud)
我已经尝试设置设置@Basic为(optional = true),但是抛出一个异常,说数据库不允许列的null值TIMESTAMP,它不是设计的.
ERROR JDBCExceptionReporter - Cannot insert the value NULL into column 'LastTouched', table 'DatabaseName.dbo.Stuff'; column does not allow nulls. INSERT fails.
Run Code Online (Sandbox Code Playgroud)
我以前在纯Hibernate中使用它,但我有意识切换到JPA并且不知道如何告诉它该列被假设在数据库端生成.请注意,我仍然使用Hibernate作为我的JPA持久层.
我有一个变量id,我想将它用作散列中的键,以便分配给变量的值用作散列的键.
例如,如果我有变量,id = 1那么所需的结果将是{ 1: 'foo' }.
我试过创建哈希,
{
id: 'foo'
}
Run Code Online (Sandbox Code Playgroud)
但是,这并不工作,而不是导致与符号的哈希:id来'foo'.
我可以发誓我以前做过这件事,但我完全是在画一个空白.
我来自JavaScript,它具有一流的功能支持.例如,你可以:
有人能举例说明我将如何在Go中这样做吗?
前几天我通过手动将类的每个元素写成String来为Java中的类编写toString(),并且我发现使用反射可能会创建一个可以工作的通用toString()方法所有课程.IE它将找出字段名称和值并将它们发送到String.
获取字段名称非常简单,这是同事提出的:
public static List initFieldArray(String className) throws ClassNotFoundException {
Class c = Class.forName(className);
Field field[] = c.getFields();
List<String> classFields = new ArrayList(field.length);
for (int i = 0; i < field.length; i++) {
String cf = field[i].toString();
classFields.add(cf.substring(cf.lastIndexOf(".") + 1));
}
return classFields;
}
Run Code Online (Sandbox Code Playgroud)
使用工厂我可以通过存储一次字段来减少性能开销,第一次调用toString().然而,找到这些价值可能要贵得多.
由于反射的性能,这可能是更实际的假设.但我对反思的想法以及如何使用它来改进我的日常编程感兴趣.
Allen Holub写了以下内容,
如果没有一些耦合,你就无法拥有一个程序.尽管如此,您可以通过盲目地遵循OO(面向对象的)规则来最大限度地减少耦合(最重要的是对象的实现应该完全隐藏在使用它的对象之外).例如,对象的实例变量(非常量的成员字段)应始终为私有.期.没有例外.永远.我是认真的.(您可以偶尔有效地使用受保护的方法,但受保护的实例变量是令人厌恶的.)
这听起来很合理,但他继续说,
你不应该出于同样的原因使用get/set函数 - 它们只是过于复杂的方式使字段公开(尽管返回完整对象而不是基本类型值的访问函数在返回对象的情况下是合理的class是设计中的关键抽象).
坦率地说,这对我来说听起来很疯狂.
我理解信息隐藏的原理,但是如果没有访问器和更改器,你根本就不能使用Java bean.我不知道如何在模型中没有访问器的情况下遵循MVC设计,因为模型不能负责渲染视图.
但是,我是一名年轻的程序员,而且我每天都在学习更多关于面向对象设计的知识.也许拥有更多经验的人可以在这个问题上权衡.
每当我想要替换一段文本时,我总是要做以下事情:
"(?P<start>some_pattern)(?P<replace>foo)(?P<end>end)"
Run Code Online (Sandbox Code Playgroud)
然后将该start组与新数据连接起来replace,然后将该end组连接起来.
有更好的方法吗?
在JPA中,有什么方法可以复制Hibernate的saveOrUpdate行为,
saveOrUpdate
public void saveOrUpdate(Object object)
throws HibernateException
Either save(Object) or update(Object) the given instance, depending upon resolution of the unsaved-value checks (see the manual for discussion of unsaved-value checking).
This operation cascades to associated instances if the association is mapped with cascade="save-update".
Parameters:
object - a transient or detached instance containing new or updated state
Throws:
HibernateException
See Also:
save(Object), update(Object)
Run Code Online (Sandbox Code Playgroud)
它实质上检查数据库中是否已存在该对象,并根据需要更新该对象或保存该对象的新实例.
JPA无交易读取很好,但我真的很想从Hibernate中获取这个方法.经验丰富的JPA开发人员如何处理这个?
java ×5
jpa ×3
annotations ×2
hibernate ×2
performance ×2
persistence ×2
debugging ×1
getter ×1
go ×1
hash ×1
immutability ×1
javac ×1
javascript ×1
jquery ×1
oop ×1
python ×1
reflection ×1
regex ×1
ruby ×1
setter ×1
syntax ×1
timestamp ×1
tostring ×1