我正在构建一个新的Web应用程序,我正在使用Spring,JPA/Hibernate和Postgres.我的一些表有creation_ts和lastupdate_ts列,这些列是时间戳列,用于跟踪插入发生的时间以及行上次更新的时间.
我也在我的表中使用列的命名约定,因此在设计策略方面,每个表都保证有两列pkey,它是一个整数代理键,以及用于乐观锁定的版本.
我有两种方法可以使这些字段保持最新状态.
选项A:使用触发器
这是我现在已经采用的解决方案,我有两个Postgres触发器,可以触发插入和更新,并使这些字段保持最新.我有两节课.
@MappedSuperclass
public abstract class PersistableObject
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="pkey")
private Integer pkey;
@Version
@Column(name="version")
private Integer version;
public Integer getPkey()
{
return this.pkey;
}
public Integer getVersion()
{
return this.version;
}
}
Run Code Online (Sandbox Code Playgroud)
我有
@MappedSuperclass
public class TimeStampedPersistableObject extends PersistableObject {
@Column(name = "creation_ts")
@Temporal(TemporalType.DATE)
@org.hibernate.annotations.Generated(value = GenerationTime.INSERT)
private Date creationTimestamp;
@Column(name = "update_ts")
@Temporal(TemporalType.DATE)
@org.hibernate.annotations.Generated(value = GenerationTime.ALWAYS)
private Date updateTimestamp;
public Date getCreationTimestamp()
{
return this.creationTimestamp;
}
public Date getUpdateTimestamp()
{
return this.updateTimestamp; …Run Code Online (Sandbox Code Playgroud) 所以我们都知道,学习编程语言只是在平台上获得高效的一小部分.学习Java库需要的时间比学习Java编程语言要长得多,C#,JavaScript,Python,Ruby等也是如此.
作为程序员,我们可以轻松地观察到for循环或数组是for循环或任何编程语言中的数组.一旦你学会了这个概念,你就不需要重新学习它,确保语法不同,但是花费很少的努力来重新学习这个概念.显然,标准库不是这种情况,这意味着我们必须重新学习如何执行常见任务,例如文件操作,与数据库交谈,在我们使用的每个平台上进行网络连接,这是低效且痛苦的,必须有更好的方式.
W3C DOM是一个跨语言库的示例,无论编程语言如何,它都应该具有相同的函数名和相同的语义.W3C DOM很难使用,但至少一旦你在一种语言/平台上学习它就会在其他语言/平台上学到它.
是否有一组交叉语言库定义为大约2011年开发人员关心的最常见任务.
澄清:我对绑定到当前平台(如.NET或JVM)的API不感兴趣,因为这些API与单个公司绑定,并且在许多情况下,它们显示了它们的年龄,如果它们今天被重新设计,则会更清洁/更好.另外主要是Java开发人员看着Oracle接管Java起诉Google一直是一个真正的恐怖节目.我真的不希望我投入的时间掌握一个平台被一个实体控制,而是某种开源项目,最好的设计获胜.
澄清:我正在寻找与许多不同语言无关的API.例如,考虑读取文本文件的内容.我必须打开文件,阅读内容,...等我会寻找一个API,其中函数在所有各种语言中具有完全相同的名称,相同的参数,以相同的顺序,具有相同的返回数据,相同的错误处理语义.我知道不同的编程范例,所以我可以使用API的OO版本,功能版本......等等.
在我的Spring/Hibernate/JPA应用程序中,我使用了很多命名查询,当我在其中一个查询中出现拼写错误时,请查看我的应用程序启动日志文件中的错误,类似于下面的错误.
Caused by: org.hibernate.HibernateException: Errors in named queries: FindAllCompanyFileTypes
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:426)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:906)
... 70 more
Run Code Online (Sandbox Code Playgroud)
如何配置hibernate打印出命名查询的错误而不只是命名查询有错误?
UPDATE例如JPA查询SELECT f FROM Foo WHERE f.v := true将失败,hibernate抱怨查询无效.Hibernate甚至没有尝试从中生成SQL,查询不正确的JPQL.我想知道的是如何让hibernate说查询是错误的,因为:=使用而不是=?不确定这是否是可以在休眠状态下打开的设置.
我正在使用OWASP Html Sanitizer来防止对我的网络应用程序进行XSS攻击.对于许多应该是纯文本的字段,Sanitizer的效果超出了我的预期.
例如:
HtmlPolicyBuilder htmlPolicyBuilder = new HtmlPolicyBuilder();
stripAllTagsPolicy = htmlPolicyBuilder.toFactory();
stripAllTagsPolicy.sanitize('a+b'); // return a+b
stripAllTagsPolicy.sanitize('foo@example.com'); // return foo@example.com
Run Code Online (Sandbox Code Playgroud)
当我有字段,如电子邮件地址有+它如foo+bar@gmail.com我结束了在数据库中的错误数据.所以有两个问题:
+ - @他们真的需要编码这些危险的角色吗?问题2对我来说是更重要的答案.
我在配置的窗口上有git,git config --global core.autocrlf false这样git就不会自动将结账时的文件从LF行结尾转换为CRLF.
当我在Windows上创建一个新文件并添加它时,我得到以下输出.
git add windows-file.txt
warning: CRLF will be replaced by LF in windows-file.txt.
The file will have its original line endings in your working directory.
Run Code Online (Sandbox Code Playgroud)
因此当将windows-file.txt添加到我想要的git索引时,git正在将我的行结束从windows更改为unix.
我遇到的问题是工作目录版本没有改变,如何配置git以便它改变工作目录和git索引的行结尾?
UPDATE
在add和commit git status之后没有显示任何差异,即使本地工作目录版本具有Windows行结尾并且repo版本具有unix行结尾.
更新 repo根目录下的.gitattributes的内容
# Set default behaviour, in case users don't have core.autocrlf set.
text eol=lf
# These files are text and should be normalized (convert crlf => lf)
*.java text
*.xml text
*.cmd text
*.sh text
*.txt text
*.md text
*.js text …Run Code Online (Sandbox Code Playgroud) 我最近将项目构建从ant转换为maven和m2e,这工作正常,现在我突然每次保存文件时建筑工作区占用大约5到10秒的时间,以前是当我刚刚保存文件时,我甚至从未注意到eclipse会做任何事情.
我猜测m2e在增量构建期间正在做一些事情,这会减慢事情的速度.我不知道是什么导致了经济放缓.我正在寻找能够找出这种放缓原因的事情.
我可以采取哪些选项或步骤来帮助我找出导致此问题的原因.
更新:这是一个多模块项目,有17个模块16个罐子和一个战争.这是在标准maven层次结构中安排的.
更新:项目清洁在非常快的机器上需要大约30到85秒的挂钟时间.Web项目本身需要大约1秒才能构建,我无法判断问题是在m2e还是其他地方.
更新:保存.java文件会导致工作区重建,可能会以不可预测的方式重建0到15秒.
更新:我使用m2e-wtp扩展与工作区工件分辨率.
更新: m2e的日志文件的一些输出
2012-12-28 17:10:43,907 [Worker-3] DEBUG o.e.m.c.p.c.AbstractCustomizableLifecycleMapping - Mojo execution key: org.apache.maven.plugins:maven-enforcer-plugin:1.2:enforce (execution: enforce-rules, phase: validate)
2012-12-28 17:10:43,907 [Worker-3] DEBUG o.e.m.c.p.c.AbstractCustomizableLifecycleMapping - Action: ignore
2012-12-28 17:10:43,907 [Worker-3] DEBUG o.e.m.c.p.c.AbstractCustomizableLifecycleMapping - Mojo execution key: pl.project13.maven:git-commit-id-plugin:2.1.2:revision (execution: default, phase: initialize)
2012-12-28 17:10:43,907 [Worker-3] DEBUG o.e.m.c.p.c.AbstractCustomizableLifecycleMapping - Action: ignore
2012-12-28 17:10:43,907 [Worker-3] DEBUG o.e.m.c.p.c.AbstractCustomizableLifecycleMapping - Mojo execution key: org.apache.maven.plugins:maven-resources-plugin:2.6:resources (execution: default-resources, phase: process-resources)
2012-12-28 17:10:43,908 [Worker-3] DEBUG o.e.m.c.p.c.AbstractCustomizableLifecycleMapping - Action: execute
2012-12-28 …Run Code Online (Sandbox Code Playgroud) 鉴于git repo有两个分支master和feature.在主服务器上重新定义功能分支时rebase master,假设该文件a.txt包含在rebase可以继续之前需要解决的冲突.
我知道我可以通过三个步骤解决冲突:
a.txt在我的编辑器中打开手动解决冲突git add a.txt告诉git我已经手动解决了冲突git rebase --continue转移rebase有没有办法通过告诉git我想要来自主分支的文件版本或者我想要来自功能分支的文件版本而不必执行上面的步骤1和2来避免步骤1.
我正在运行一个多模块 gradle 构建,并且打开了缓存。有些任务说UP-TO-DATE,有些说FROM-CACHE例如。
> Task :components:security:testFixturesClasses UP-TO-DATE
> Task :components:security:checkstyleTestFixtures FROM-CACHE
Run Code Online (Sandbox Code Playgroud)
UP-TO-DATE任务 is和任务 that之间到底有什么区别FROM-CACHE?gradle 如何确定什么是UP-TO-DATEvs. FROM-CACHE?
我正在考虑使用Maven 3进行一些Web开发.我知道如何使用maven来解决基于java的jar文件.我如何使用maven来解决JavaScript依赖关系,例如我想让maven自动将jquery放入我的webapp/js文件夹中?
是否可以使用Maven 3进行转换JavaScript依赖?
在Spring Data中是否可以从方法名称关闭查询生成?
鉴于界面
public interface UserRepository extends Repository<User, Long> {
List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
}
Run Code Online (Sandbox Code Playgroud)
我希望spring security能够产生一个错误,说明从方法名称生成查询已被关闭,请使用显式@Query注释,如此.
public interface UserRepository extends Repository<User, Long> {
@Query("select u from User u where u.emailAddress = ?1 and u.lastname = ?2")
List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
}
Run Code Online (Sandbox Code Playgroud)
我想关闭自动查询生成,因为我认为更容易阅读查询并知道发生了什么,而不是阅读方法名称并转换为Spring数据将生成的查询,同样在大型团队中有很多开发人员可能还不熟悉Spring数据@Query更具可读性?
如何从Spring JPA中的方法名称关闭查询创建?
java ×4
git ×2
hibernate ×2
jpa ×2
maven ×2
spring ×2
components ×1
eclipse ×1
gradle ×1
jpa-2.0 ×1
m2e ×1
maven-2 ×1
maven-3 ×1
owasp ×1
postgresql ×1
sanitization ×1
security ×1
spring-data ×1
xss ×1