背景信息:我遇到一个问题,其症状是实体更新未完成。查看我的日志,我可以看到我期望的更新 sql 语句,但它们几乎是同时的(相隔 0.012 秒),并且应用程序在更新实体时使用悲观读锁。
这引出了我的问题:当存在悲观锁时预期的行为是什么?我还应该看到多个更新查询吗?我应该预期会抛出 PessimisticLockException,对吧?我还应该寻找其他指标吗?
Hibernate 是我的 JPA 实现。
我正在查看包含synchronized方法的第三方库中的一些代码,并且在此方法中有一个锁定实例变量的synchronized块.它与此类似:
public class Foo {
final Bar bar = new Bar();
public synchronized void doSomething() {
// do something
synchronized(bar) {
// update bar
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
这有意义吗?如果是这样,在同步方法中有一个同步语句有什么好处?
鉴于同步方法锁定整个对象,对我来说似乎是多余的.在处理非私有的实例变量时,这种方法是否有意义?
我来自 Java 背景,我默认在我熟悉的 Typescript/Angular 组件类中使用 getter/setter 命名约定。
getFoo()
setFoo()
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不是最佳实践,而是我应该使用约定
get foo()
set foo()
Run Code Online (Sandbox Code Playgroud)
问题
我正在使用Lombok删除样板代码。我正在尝试将实体打印到控制台,但出现StackOverflowError。该实体与另一个实体具有双向关系,因此我想从toString方法中排除该实体。
我的实体看起来像这样:
@Entity
@Data
public class Foo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long fooId;
private String name;
@ManyToOne
@JoinColumn(name = "barId")
@EqualsAndHashCode.Exclude
@ToString.Exclude
private Bar bar;
}
Run Code Online (Sandbox Code Playgroud)
这是我第一次尝试使用@ToString.Exclude它,但似乎没有表现。我使用不正确吗?我只想打印出来fooId,name当我在Foo对象上调用toString时。
编辑
我熟悉从顶级@ToString注释中排除或包含字段的替代方法。我试图避免这种情况。我只想@Data在类级别使用,并注释应排除的字段。
编辑2
仍在简化类上复制。龙目岛1.18.8版本。
我遇到了用 Java 代码编写的以下条件:
String pattern = "(?i:U[A-Z0-9]C.*)";
if (foo.matches(pattern))) {
...
Run Code Online (Sandbox Code Playgroud)
我不明白什么?i:意思。我见过(?i)用来表示不区分大小写的,但不确定这里的形式。
谢谢你的帮助!
我正在查看包含以下内容的脚本(过去已成功使用过):
node=1
while :
do
userKey=WEB_${node}_USER
userVal=`echo ${!userKey}`
Run Code Online (Sandbox Code Playgroud)
我一直无法弄清楚为什么会在这样的变量引用中添加感叹号。“!”的目的是什么?在这种情况下服务?
我很少写很多脚本,所以如果我遗漏了任何细节,请告诉我,我会尽力提供更多信息。我无法在其他地方找到这个答案。
提前致谢!
我的表中有4列的复合唯一索引和性能问题的查询,它们分别过滤了2列.也许是一个愚蠢的问题,但我是否应该对各个列进行索引以提高性能?谢谢你的帮助!