小编Luc*_*uca的帖子

多语言数据库,具有默认回退功能

我有一个问题,我知道,已被广泛讨论过,但在我看来,还有一个方面需要澄清.

我正在创建一个带有多语言数据库的Web应用程序,我已经找到了一些好的练习文章(例如 这个),这里的答案就像这样堆栈溢出.

所以我决定使用一个带有我的项目ID的主表和另一个带有每个项目翻译的表格,比方说,例如

Content
ContentTranslation
Run Code Online (Sandbox Code Playgroud)

要么

Category
CategoryTranslation
Run Code Online (Sandbox Code Playgroud)

等等.

现在我在做什么?我只是从数据库中获取所有翻译的项目,然后我迭代每一个,以根据当前用户的本地查找正确的翻译,如果我找到正确的本地我设置到主要对象,该页面的翻译渲染,否则我只是得到标记为"默认"的翻译.

但是,对于大量对象和翻译,服务器响应时间可能会增长,即使用户可能没有注意到,我也不希望这样.

那么,这个用例有没有好的做法呢?例如,一些特定的查询说"选择带语言环境的翻译",但是如果你没有找到它只是设置了一个"默认"标志?

现在,我正在使用Spring MVC和Hibernate以及JPA(通过JPARepository).

我的对象都扩展了我用这种方式创建的基本可翻​​译类

@MappedSuperclass
public abstract class Translatable<T extends Translation> extends BaseDTO {

    private static final long serialVersionUID = 562001309781752460L;

    private String title;

    @OneToMany(fetch=FetchType.EAGER, orphanRemoval=true, cascade=CascadeType.ALL)
    private Set<T> translations = new HashSet<T>();

    @Transient private T currentLocale;

    public void addLocale(T translation, boolean edit) {
        if (!edit)
            getTranslations().add(translation);
    }

    public void remLocale(String locale) {
        T tr = null;
        for (T candidate: getTranslations()) {
            if (candidate.getLocale().equals(locale))
                tr …
Run Code Online (Sandbox Code Playgroud)

java database multilingual spring jpa

16
推荐指数
2
解决办法
2万
查看次数

Play2 和 Intellij 未检测到主类

我正在尝试在 sbt 子项目中开发一个播放框架应用程序。目录树如下所示:

- main-project
|--sub-project
| |--app
| |--conf
| |--logs
| |--public
| |--test
|--project
|--build.sbt
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用 sbt shell 和以下命令运行播放应用程序

sub-project/run

播放正确开始。但是,如果我尝试使用 IntelliJ 运行配置运行它,则会出现错误java.lang.RuntimeException: No main class detected.

遵循日志的第一行和 IJ 启动的命令:

/usr/java/jdk1.8.0_111/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:41258,suspend=y,server=n -Dfile.encoding=UTF8 -Djline.terminal=none -Dsbt.log.noformat=true -Dsbt.global.base=/tmp/sbt-global-pluginstub -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M -javaagent:/home/myusername/Programmi/idea-IU-173.3727.127/lib/rt/debugger-agent.jar=/tmp/capture.props -classpath /home/myusername/.IntelliJIdea2017.3/config/plugins/Scala/launcher/sbt-launch.jar:/home/myusername/Programmi/idea-IU-173.3727.127/lib/idea_rt.jar xsbt.boot.Boot "project sub-project" run
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256M; support was removed in 8.0
Connected to the target VM, address: '127.0.0.1:41258', transport: 'socket'
[warn] No sbt.version set in …
Run Code Online (Sandbox Code Playgroud)

intellij-idea sbt playframework

5
推荐指数
1
解决办法
1894
查看次数

值 isBlank 不是 String 的成员

我正在使用 sbt 1.2.6 来编译我的项目。在我的本地机器编译运行良好,但是当使用 travis-ci 进行测试时,编译器抱怨value isBlank is not a member of String.

你可以在这里找到源代码 https://github.com/LukeDS-it/webfleet-driver/blob/679dff9877ea1edd403dc6cd3d55a22d5fd5328f/server/src/main/scala/it/ldsoftware/webfleet/driver/services/v1/AggregateService #L138

和这里的构建报告 https://travis-ci.com/LukeDS-it/webfleet-driver/builds/92441228

我没有更多信息可以提供。我的 IDE 说一切正常,如果我在本地运行编译或测试,一切正常。

我错过了什么?

scala sbt travis-ci

5
推荐指数
1
解决办法
1143
查看次数

Java泛型和流

我正在建立一种避免重复代码的框架,在某个时候,我需要将对象Foo的列表转换为对象Bar的列表。

我有扩展的数据库实体

public class BaseEntity {...}
Run Code Online (Sandbox Code Playgroud)

以及扩展的演示对象

public class BaseDTO<T extends BaseEntity> {...}
Run Code Online (Sandbox Code Playgroud)

所以

public class Foo extends BaseEntity {...}
Run Code Online (Sandbox Code Playgroud)

和

public class Bar extends BaseDTO<A extends BaseEntity> {
    public Bar(Foo entity, Locale l) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,使用流很容易将Foo列表转换为Bar列表

public abstract ClassThatUsesFooAndBar() {

    public List<Bar> convertFooToBar(List<Foo> list) {
        return list.stream().map(f -> new Bar(f, locale)).collect(...);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这里有个问题,这些Foo和Bar实际上是泛型(A和B),因此使用Foo和Bar的类实际上是ClassThatUsesAandB<A extends BaseEntity, B extends BaseDTO>,因此该函数也必须是抽象的,并以正确的A和B实现为样板代码实现,因为显然您无法实例化泛型类型。

有没有一种方法可以使用泛型/流/ lambdas创建可以编写一次的函数,从而使实现类无需重新实现它?函数签名为

public List<B> convertAToB(List<A> list);
Run Code Online (Sandbox Code Playgroud)

我希望我已经很清楚了,如果您需要进一步的解释,请询问

谢谢!

java generics lambda java-stream

3
推荐指数
1
解决办法
5154
查看次数