我正在使用 Spring 4.3.3、Spring Data 1.10.5、Hibernate 5.0.11 和 Hibernate Validator 5.3.1。
问题是当验证失败时我期望
org.hibernate.exception.ConstraintViolationException
Run Code Online (Sandbox Code Playgroud)
被排除在我的 JUnit 测试之外,而是
org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:138)
Run Code Online (Sandbox Code Playgroud)
投掷
javax.validation.ConstraintViolationException
Run Code Online (Sandbox Code Playgroud)
这最终导致奇怪的结果
org.springframework.transaction.TransactionSystemException
Run Code Online (Sandbox Code Playgroud)
我该如何修复它?
代码可在GitHub上找到,第 24 行和第 29 行。
完整的堆栈跟踪是
org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:526)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:484)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:291)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
at com.sun.proxy.$Proxy67.createAccount(Unknown Source)
at com.urlshortener.service.AccountServiceImplTest.testCreateAccountEmptyName(AccountServiceImplTest.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) …Run Code Online (Sandbox Code Playgroud) 我正在开发支持英语、俄语和韩语的 Java 应用程序。
所以我为每种语言准备了 unicode 属性文件。然后我使用捆绑包中的 _ 函数获取一些字符串值,将其设置为
InputStream stream = LocaleManager.class.getClassLoader().getResourceAsStream(path);
ResourceBundle bundle = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8"));
public static String _(String key) {
return bundle.getString(key);
}
Run Code Online (Sandbox Code Playgroud)
对于英语和俄语来说,它非常有效。对于韩语,JTextArea 可以正确显示韩语字符,但 JLabel 不能。它显示方块,在 Eclipse 控制台中显示 ??,但是俄罗斯字符可以在 Eclipse 控制台中正确显示。
所以看起来 JLabel 有问题。
想象一下,你有一个JScrollPane或多个JLabels或任何其他JComponents添加到它.
您如何检查某个组件是否可见/部分可见/用户不可见?(滚动)
我试过谷歌,但找不到一个简单的解决方案.是否有一些现有的方法我缺少或我们必须处理坐标和矩形比较?
UPD:以下内容不适用于我的情况.它似乎与JLabel.setVisible(true/false)有关,但不在JScrollPane中
JLabel.isVisible();
Run Code Online (Sandbox Code Playgroud) 据我所知,这是Java中多线程的非常常见的片段.
boolean loaded = false;
Object lock = new Object();
public void block() {
synchronized (lock) {
while(!loaded)
lock.wait(); // Unhandled exception type InterruptedException
}
}
Run Code Online (Sandbox Code Playgroud)
在另一个线程中
public void done () {
synchronized (lock) {
loaded = true;
lock.notify();
}
}
Run Code Online (Sandbox Code Playgroud)
但是我不知道应该把它放在哪里尝试和捕获,我可以围绕整个同步块或只是lock.wait()?什么是经验法则,它真的重要吗?
处理是否可以Thread.currentThread().interrupt()在这种情况下打电话?
我试图运行PMD来自Ant于Eclipse当我生成项目.
这是我的build.xml文件:
<taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask"/>
<target name="check_pmd">
<pmd rulesetfiles="C:\Users\Nikolay\ProjectName\lib\rulesets\java\basic.xml">
<formatter type="html" toFile="pmd_report.html" toConsole="true"/>
<fileset dir="C:\Users\Nikolay\ProjectName\src">
<include name="**/*.java"/>
</fileset>
</pmd>
</target>
Run Code Online (Sandbox Code Playgroud)
它运行良好basic.xml,但我想运行java文件夹中的所有规则集(它有大约20个规则集)所以我尝试过:
<pmd rulesetfiles="C:\Users\Nikolay\ProjectName\lib\rulesets\java\*.xml">
<pmd rulesetfiles="C:\Users\Nikolay\ProjectName\lib\rulesets\java\*">
Run Code Online (Sandbox Code Playgroud)
但是当我试图跑步时,他们都失败了.有没有办法指定文件夹,而不是手动指定文件列表的单个文件?
为了让未来的读者在Eclipse下配置Ant PMD:
pmd-bin.zip从官方网站下载pmd.jar,jaxen.jar然后asm.jarrulesets文件夹<pmd rulesetfiles=...>我有 Teamcity 7.1 和大约 1000 个测试。许多测试不稳定并且随机失败。即使单个测试失败,整个构建也会失败,并且运行新构建需要 1 小时。
因此,我希望能够配置 Teamcity 以在同一构建中重新运行失败的测试特定的时间。任何测试的成功都应被视为成功,而不是失败。是否可以?
现在,某些模块中的测试失败,Teamcity 不会继续进行下一个模块。如何修复它?
有一个方法:
org.testcontainers.containers.GenericContainer#withNetwork
我可以使用它来使用 TestContainers 库生成具有相同网络的容器。
但是 DockerComposeContainer 怎么样,首先我启动它,然后我想从中获取一个网络并在我跟随 GenericContainers 生成时重用相同的网络。
现在还有可能吗?
这是我用来显示我在另一个项目中面临的问题的代码。
如果我使用 JScrollPane 作为 panel2 的包装器,我不会得到任何这样的行。为什么? 我想点击 JscrollPane 并打印如下事件。
java.awt.event.MouseEvent[MOUSE_CLICKED,(800,469),absolute(808,499),button=1,modifiers=Button1,clickCount=1] on javax.swing.JPanel[,0,0,934x612,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.LineBorder@cc0e01,flags=9,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=880,height=630]]
Run Code Online (Sandbox Code Playgroud)
如果现在我改变
panel1.add(pane);
Run Code Online (Sandbox Code Playgroud)
到
panel1.add(panel2);
Run Code Online (Sandbox Code Playgroud)
然后上面的消息被打印出来。
public class LostMouseEvent {
public static void main(String[] args) {
new LostMouseEvent();
}
public LostMouseEvent() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JScrollPane pane = new JScrollPane(panel2);
panel1.setPreferredSize(new Dimension(880, 630));
panel1.setBorder(BorderFactory.createLineBorder(Color.blue));
panel2.setPreferredSize(new Dimension(840, 610));
panel2.setBorder(BorderFactory.createLineBorder(Color.green));
panel1.add(pane);
frame.add(panel1);
frame.pack();
frame.setVisible(true);
frame.setSize(950, 650);
panel1.addMouseListener(new …Run Code Online (Sandbox Code Playgroud) 我正在学习和试验Java泛型,并提出了一段不能按预期编译的代码.Result无法解决.
I代表输入,O输出.
public interface Stats<I, O> {
O addItem (int index, I item);
}
public class AStats implements Stats<Item, Result> {
public static enum Result {
SUCCESS1,
SUCCESS2,
ERROR;
}
@Override
public Result addItem (int index, Item item) {
//valid code
}
}
Run Code Online (Sandbox Code Playgroud)
有没有比Result在单独文件中声明更优雅的解决方案?
一般来说,有一个返回泛型类型实例的方法是不是很糟糕?
从jOOQ 手册中至少我不清楚如何正确配置乐观锁定。
<!-- All table and view columns that are used as "version" fields for
optimistic locking (A Java regular expression. Use the pipe to separate several expressions).
See UpdatableRecord.store() and UpdatableRecord.delete() for details -->
<recordVersionFields>REC_VERSION</recordVersionFields>
Run Code Online (Sandbox Code Playgroud)
及以下
recordVersionFields: Relevant methods from super classes are overridden to return the VERSION field
Run Code Online (Sandbox Code Playgroud)
它到底意味着什么?有人可以举个例子吗?
想象一下,如果有这张表,例如:
CREATE TABLE "users" (
"id" INTEGER DEFAULT nextval('global_seq') NOT NULL,
"code" TEXT NOT NULL,
"version" INTEGER NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
我应该在 pom.xml 中放入什么recordVersionFields?
<database>
<inputSchema>PUBLIC</inputSchema> …Run Code Online (Sandbox Code Playgroud) java ×8
swing ×3
jscrollpane ×2
ant ×1
build ×1
docker-java ×1
eclipse ×1
enums ×1
generics ×1
hibernate ×1
jcomponent ×1
jframe ×1
jlabel ×1
jooq ×1
jpanel ×1
notify ×1
pmd ×1
spring ×1
sql ×1
static ×1
teamcity ×1
teamcity-7.1 ×1
testing ×1
utf-8 ×1
visibility ×1