所以我们的项目使用PostgreSQL数据库,我们使用JPA来操作数据库.我们使用Netbeans 7.1.2中的自动创建程序从数据库创建了实体.
经过小的更改后,我们的主键值被描述为:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Basic(optional = false)
@NotNull
@Column(name = "idwebuser", nullable = false)
private Integer idwebuser;
Run Code Online (Sandbox Code Playgroud)
问题是现在应用程序不灵活,因为当我们直接修改数据库(使用SQL或其他工具)而不是通过Java应用程序时 - 生成的值低于实际的数据库ID值 - 因此我们在创建新实体.
是否有可能JPA可以让数据库自动生成ID,然后在创建过程后获取它?或者什么是更好的解决方案?谢谢.
编辑 更具体地说:我们有一个用户表,我的问题是使用任何类型的策略生成类型,JPA正在插入一个具有由其生成器ID指定的新实体.这对我来说是错误的,因为如果我自己对表进行更改,通过添加新条目,应用程序的GeneratedValue低于当前ID - 这导致我们出现重复ID异常.我们能解决它吗?)?
关于答案的简短说明 我身边有一个小谎言,因为我们使用了PG管理员 - >查看前100行并从那里编辑了行而不是使用选择.但是,事实证明,这个编辑器以某种方式跳过了更新ID的过程,因此即使在DB中,当我们编写一个正确的INSERT时,它也会被执行不正确的ID!所以它基本上是我们使用的编辑器的问题,而不是数据库和应用程序......
现在它甚至可以使用 @GeneratedValue(strategy=GenerationType.IDENTITY)
我已经创建了一个完整的例子来描述这个问题.我的实际应用程序甚至比演示的演示版还要大,每个控制器都有更多的服务和指令.这导致更多的代码重复.我尝试将一些代码注释用于澄清, PLUNKER:http://plnkr.co/edit/781Phn?p = preview
重复部分:
routerApp.controller('page1Ctrl', function(pageFactory) {
var vm = this;
// page dependent
vm.name = 'theOne';
vm.service = 'oneService';
vm.seriesLabels = ['One1', 'Two1', 'Three1'];
// these variables are declared in all pages
// directive variables,
vm.date = {
date: new Date(),
dateOptions: {
formatYear: 'yy',
startingDay: 1
},
format: 'dd-MMMM-yyyy',
opened: false
};
vm.open = function($event) {
vm.date.opened = true;
};
// dataservice
vm.data = []; // the structure can be different but …Run Code Online (Sandbox Code Playgroud) javascript design-patterns dry angularjs angularjs-controller
我受到了这个主题的启发:List和Set之间的性能和内存分配比较实际上运行了一些测试并测量ArrayList和之间的性能差异HashSet.
在上述主题中,最受欢迎的答案引起了很多关注(链接),他说:
对于相同数量的元素,HashSet比ArrayList消耗大约5.5倍的内存
在ScalaMeter的帮助下,我想确保这一点.
我做了两个简单的测试,从添加10000到100000元素都ArrayList和HashSet.将初始大小设置为最大值不会更改结果.我用两种类型测试了这些集合:
Int (将连续数字0到100000)String(使用Apache放置随机字符串RandomStringUtils)该代码可以在我的仓库在这里.
并运行那些,给了我这样的结果:
问题:
在引用的答案中提到的理论发生了什么?这是假的吗?或者我的身边可能有些错误?
谢谢 :)!
@andrzej回答后 更新我再次更新了代码(和存储库).结果越来越好,但结果仍然不是5.5倍.我现在正在检查更多的东西.
标题也可能是:
Maven和SBT组装插件之间有什么区别.
我发现这是一个问题,同时将项目从Maven迁移到SBT.
为了描述这个问题,我创建了一个带有依赖关系的示例项目,我发现它的行为有所不同,具体取决于构建工具.
https://github.com/atais/mvn-sbt-assembly
唯一的依赖是(sbt风格)
"com.netflix.astyanax" % "astyanax-cassandra" % "3.9.0",
"org.apache.cassandra" % "cassandra-all" % "3.4",
Run Code Online (Sandbox Code Playgroud)
而我不明白的是,为什么mvn package成功地创造了胖罐,同时sbt assembly给出了冲突:
[error] 39 errors were encountered during merge
[error] java.lang.RuntimeException: deduplicate: different file contents found in the following:
[error] /home/siatkowskim/.ivy2/cache/org.slf4j/jcl-over-slf4j/jars/jcl-over-slf4j-1.7.7.jar:org/apache/commons/logging/<some classes>
[error] /home/siatkowskim/.ivy2/cache/commons-logging/commons-logging/jars/commons-logging-1.1.1.jar:org/apache/commons/logging/<some classes>
...
[error] /home/siatkowskim/.ivy2/cache/com.github.stephenc.high-scale-lib/high-scale-lib/jars/high-scale-lib-1.1.2.jar:org/cliffc/high_scale_lib/<some classes>
[error] /home/siatkowskim/.ivy2/cache/com.boundary/high-scale-lib/jars/high-scale-lib-1.0.6.jar:org/cliffc/high_scale_lib/<some classes>
...
Run Code Online (Sandbox Code Playgroud) 我最近发现了一种在Apache Spark中使用logback而不是log4j的方法(两者都用于本地使用spark-submit).然而,最后一块遗失了.
问题是Spark非常努力地不在logback.xml其类路径中查看设置.我已经找到了一种在本地执行期间加载它的方法:
基本上,检查系统属性logback.configurationFile,但加载logback.xml从我/src/main/resources/以防万一:
// the same as default: https://logback.qos.ch/manual/configuration.html
private val LogbackLocation = Option(System.getProperty("logback.configurationFile"))
// add some default logback.xml to your /src/main/resources
private lazy val defaultLogbackConf = getClass.getResource("/logback.xml").getPath
private def getLogbackConfigPath = {
val path = LogbackLocation.map(new File(_).getPath).getOrElse(defaultLogbackConf)
logger.info(s"Loading logging configuration from: $path")
path
}
Run Code Online (Sandbox Code Playgroud)
然后当我初始化我的SparkContext时......
val sc = SparkContext.getOrCreate(conf)
sc.addFile(getLogbackConfigPath)
Run Code Online (Sandbox Code Playgroud)
我可以确认它在本地工作.
spark-submitspark-submit \
...
--master yarn \
--class com.company.Main\
/path/to/my/application-fat.jar \ …Run Code Online (Sandbox Code Playgroud) 有一个 Scala Flink 应用程序,我在其中使用 Jackson 库解析 JSON。解析由自定义方法处理,它使用延迟启动概念来保持快速。
现在,无论出于何种原因,在 Flink 管道中进一步传递带有惰性值的模型会导致一些奇怪的错误,util.Iterator这是读取 JSON 的主干。我怀疑问题可能实际上来自Kryo但我不知道如何确认。值得注意的是,.toList在同一个(flink)中急切地初始化模型(使用)map修复了这个问题。但事实并非如此,我想进一步传递我的懒惰模型。
最后,我提供了一个带有演示代码的存储库,但我也想在 StackOverflow 中提供所有详细信息。
示例模型和解析定义:
case class Root(items: Collection[Data])
case class Data(data: Collection[Double])
def toRoot(node: JsonNode): Root = {
val data: util.Iterator[JsonNode] = if (node.hasNonNull("items")) node.get("items").elements() else node.elements()
val items: Collection[Data] = data.asScala.map(x => toData(x))
Root(items)
}
Run Code Online (Sandbox Code Playgroud)
JSON 数据类似于:
{
"items": [
{
"data": [
11.71476355252127,
48.342882259940176,
507.3,
11.714791605037252,
...
Run Code Online (Sandbox Code Playgroud)
并在一部map作品中完成所有工作:
env.fromCollection(Seq(input))
.map(i => flatten(read(i)))
.print()
Run Code Online (Sandbox Code Playgroud)
但进一步传递失败:
env.fromCollection(Seq(input))
.map(i …Run Code Online (Sandbox Code Playgroud) 我们对PostgreSQL中的继承有疑问,并将其映射为JPA中的实体.我们想要映射的数据库和表格是:
CREATE TABLE Answer (
idAnswer SERIAL,
answerContent VARCHAR,
idQuestion INTEGER,
version INTEGER,
CONSTRAINT Answer_idAnswer_PK PRIMARY KEY (idAnswer),
CONSTRAINT Answer_idQuestion_FK FOREIGN KEY (idQuestion) REFERENCES Question(idQuestion)
);
CREATE TABLE MatchAnswer (
matchingAnswer VARCHAR NOT NULL,
version INTEGER,
CONSTRAINT MatchAnswer_idAnswer_PK PRIMARY KEY (idAnswer)
) INHERITS(Answer);
CREATE TABLE TrueFalseAnswer (
isTrue BOOLEAN NOT NULL,
version INTEGER,
CONSTRAINT TrueFalseAnswer_idAnswer_PK PRIMARY KEY (idAnswer)
) INHERITS(Answer);
Run Code Online (Sandbox Code Playgroud)
我们使用Netbeans 7.1.2中的自动工具为实体映射它们.起初我觉得加入就足够了
@Entity
@Table(name = "truefalseanswer", catalog = "jobfairdb", schema = "public")
@XmlRootElement
public class Truefalseanswer extends Answer implements Serializable …Run Code Online (Sandbox Code Playgroud) 在我的项目中,.pom我设置了maven-clean-plugin这样的:
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>2.6.1</version>
<configuration>
<filesets>
<fileset>
<directory>src/main/webapp/bower_components</directory>
</fileset>
<fileset>
<directory>node_modules</directory>
</fileset>
<fileset>
<directory>node</directory>
</fileset>
</filesets>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
插件的目的是删除由其创建的目录frontend-maven-plugin.无论如何,最后一个工作正常.
问题
现在的问题是,无论如何,永远不会删除上述文件夹之一.它始终是"中间的".我添加了3 filesets并且始终没有删除第二个,请参阅日志:
[INFO] Deleting /src/main/webapp/bower_components (includes = [], excludes = [])
[INFO] Deleting /node_modules (includes = [.bindings], excludes = [])
[INFO] Deleting /node (includes = [], excludes = [])
Run Code Online (Sandbox Code Playgroud)
如果我更改文件夹的顺序:
[INFO] Deleting /src/main/webapp/bower_components (includes = [], excludes = [])
[INFO] Deleting /node (includes = [.bindings], excludes = [])
[INFO] Deleting /node_modules (includes = …Run Code Online (Sandbox Code Playgroud) 我创造了一个可爱的单线:
Option("something").map(_ => Try("something else")).flatten.getOrElse("default")
Run Code Online (Sandbox Code Playgroud)
它实际上不编译,有错误:
Error:(15, 31) Cannot prove that scala.util.Try[String] <:< Option[B].
Option("").map(_ => Try("")).flatten.getOrElse("");}
^
Run Code Online (Sandbox Code Playgroud)
所以我找到了解决办法:
Option("something").flatMap(_ => Try("something else").toOption).getOrElse("default")
Run Code Online (Sandbox Code Playgroud)
我的同事警告我,我的构建实际上正在丢失错误信息。这是真的,在现实生活中 - 不可接受。
在摆脱了所有重复之后,我最终得到了:
implicit class CoolTry[T](t: Try[T]) extends StrictLogging {
def toOptionSE: Option[T] = t match {
case Success(s) => Some(s)
case Failure(ex) =>
logger.error(ex.getMessage, ex)
None
}
}
Run Code Online (Sandbox Code Playgroud)
使用:
Option("something").flatMap(_ => Try(new Exception("error")).toOptionSE).getOrElse("default")
Run Code Online (Sandbox Code Playgroud)
我相信在每个应用程序中都有许多类似的情况,我只是不知道我的方法是不好还是Try().toOption只是做错了?
据我所知,伐木是一个副作用,但在使用Try我想每个人都不会想到,如果出了问题?
implicit类得到改善呢?Try().toOption我的方式?谢谢!
在我的应用程序中的某个时刻,我有一个带有由案例类创建的Struct字段的DataFrame。现在,我想将其强制转换/映射回case类类型:
import spark.implicits._
case class Location(lat: Double, lon: Double)
scala> Seq((10, Location(35, 25)), (20, Location(45, 35))).toDF
res25: org.apache.spark.sql.DataFrame = [_1: int, _2: struct<lat: double, lon: double>]
scala> res25.printSchema
root
|-- _1: integer (nullable = false)
|-- _2: struct (nullable = true)
| |-- lat: double (nullable = false)
| |-- lon: double (nullable = false)
Run Code Online (Sandbox Code Playgroud)
基本:
res25.map(r => {
Location(r.getStruct(1).getDouble(0), r.getStruct(1).getDouble(1))
}).show(1)
Run Code Online (Sandbox Code Playgroud)
看起来真的很脏有没有更简单的方法?
scala dataframe apache-spark apache-spark-sql apache-spark-2.0
scala ×5
java ×3
apache-spark ×2
java-ee ×2
jpa ×2
maven ×2
maven-3 ×2
postgresql ×2
angularjs ×1
apache-flink ×1
collections ×1
database ×1
dataframe ×1
dry ×1
entity ×1
hibernate ×1
iterator ×1
jackson ×1
javascript ×1
kryo ×1
maven-plugin ×1
netbeans ×1
optional ×1
sbt ×1
sbt-assembly ×1
scala-2.11 ×1
scalameter ×1
spark-submit ×1
try-catch ×1