我正在做一些重构和审查我们正在开发的应用程序.在这样做时我发现注入了更多的豆子,我认为以懒惰方式装载它们会更适合它们的目的.我使用的是Java EE 6,并且倾向于使用比EJB注入更多的CDI.
所以问题是是否有可能懒得注入豆子,如果是这样,你怎么能这样做?
我现在使用git一段时间了,但大多数时候我更喜欢与Intelij IDEA的集成.现在,为了扩展我对系统的了解和理解,我决定更多地使用命令行.我观察到的是有两种类型的参数:
--parameter and -parameter
Run Code Online (Sandbox Code Playgroud)
例如:
git commit --amend -m "New commit message"
Run Code Online (Sandbox Code Playgroud)
我在一些linux工具上观察到了相同的方法.
我找到了以下手册https://code.google.com/p/javamelody/wiki/UserGuideAdvanced#JPA_monitoring
它包含一些有关我应该进行的更改的信息persistence.xml,以便让JavaMelody收集JPA/SQL统计信息.
但是,我不太清楚,是否应该provider用JavaMelody-provider 替换现有的,还是应该将它放到一个单独的持久性单元中?
我尝试了前一个选项,但它打破了应用程序(构建失败,出现错误,例如'无法将某些代理强制转换为EntityManagerFactory').
我正在尝试从我的SQLite数据库中检索一些信息,以获取Android应用程序的登录页面.从db检索的代码是:
login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = SQLiteDatabase.openDatabase("/data/data/com.example.androidproject/databases/myDB", null, 0);
// Check Login
String username = usernamelogin.getText().toString();
String password = loginpassword.getText().toString();
Cursor c = db.rawQuery("SELECT name, password FROM User WHERE name='?' AND password='?'", new String[] {username, password});
if(c.moveToFirst()) {
Intent intent=new Intent(Login.this, MainActivity.class);
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(), "Invalid", Toast.LENGTH_LONG).show();
}
c.close();
db.close();
}
});
Run Code Online (Sandbox Code Playgroud)
但我一直收到这个错误:
03-12 20:38:40.216: E/AndroidRuntime(691): FATAL EXCEPTION: main
03-12 20:38:40.216: E/AndroidRuntime(691): java.lang.IllegalArgumentException: Cannot bind argument at index 2 …Run Code Online (Sandbox Code Playgroud) 我在尝试运行我的应用程序时意外收到以下错误:无法实例化应用程序。我在下面包含了日志猫。我觉得包名称与包名称不一致,因此可能是错误。
10-06 05:44:38.913: E/AndroidRuntime(2056): FATAL EXCEPTION: main
10-06 05:44:38.913: E/AndroidRuntime(2056): java.lang.RuntimeException: Unable to instantiate application com.dooba.beta.IntegratingFacebookTutorialApplication: java.lang.IllegalStateException: Unable to get package info for com.dooba.beta; is package not installed?
10-06 05:44:38.913: E/AndroidRuntime(2056): at android.app.LoadedApk.makeApplication(LoadedApk.java:509)
10-06 05:44:38.913: E/AndroidRuntime(2056): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4417)
10-06 05:44:38.913: E/AndroidRuntime(2056): at android.app.ActivityThread.access$1300(ActivityThread.java:141)
10-06 05:44:38.913: E/AndroidRuntime(2056): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
10-06 05:44:38.913: E/AndroidRuntime(2056): at android.os.Handler.dispatchMessage(Handler.java:99)
10-06 05:44:38.913: E/AndroidRuntime(2056): at android.os.Looper.loop(Looper.java:137)
10-06 05:44:38.913: E/AndroidRuntime(2056): at android.app.ActivityThread.main(ActivityThread.java:5103)
10-06 05:44:38.913: E/AndroidRuntime(2056): at java.lang.reflect.Method.invokeNative(Native Method)
10-06 05:44:38.913: E/AndroidRuntime(2056): at java.lang.reflect.Method.invoke(Method.java:525)
10-06 05:44:38.913: E/AndroidRuntime(2056): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-06 …Run Code Online (Sandbox Code Playgroud) 我真的找不到答案.也许是因为答案很明显.无论如何,在可运行的jar中存储密码是否安全?
就像,我正在一个类中建立数据库连接.人们能够阅读此代码吗?我不希望他们知道MySQL密码.
我有这些类,字段总是延迟加载.
public class Book {
@ManyToOne(fetch = FetchType.LAZY)
private Publication publication;
@OneToMany(fetch = FetchType.LAZY)
private List<Author> authors;
@OneToMany(fetch = FetchType.LAZY)
private List<Genre> genres;
}
public class Publication{
@OneToMany(fetch = FetchType.LAZY)
private List<Founder> founders;
}
Run Code Online (Sandbox Code Playgroud)
我想要实现的是连接提取连接.在hql中,它看起来像这样:
FROM Book b LEFT JOIN b.authors LEFT JOIN b.genres LEFT JOIN b.publication p LEFT JOIN p.founders
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所尝试的但是它不起作用:
Root<Book> root ...
Join<Book, Publication> publication = root.join("publication");
publication.fetch("founders");
root.fetch("authors");
root.fetch("genres");
Run Code Online (Sandbox Code Playgroud)
这是异常的原因:
Caused by: javax.persistence.PersistenceException: org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)
at …Run Code Online (Sandbox Code Playgroud) 我有这个我建立的singelton数据库,以及我创建的这个Junit测试:
独生子
package SingeltonDBVersion1;
import GlobalSetting.User;
/****************************************************************************
* This is the SingeltonDB. it warps the object DBconn according to the
* Singleton pattern. it receive name and password (i.e. DBConn parameters) and
* if it is the first time that a UserContorll try to get an instance it connect
* to the database. After that, the DBConn instance will be return to the user.
*****************************************************************************/
public class SingeltonDB {
private static DBconnImpl db = null;
private static SingeltonDB singalDb = …Run Code Online (Sandbox Code Playgroud) 跟进这个问题.有这样的层次结构.A是基类:
A
/ \
B C
| A | | B | | C |
| getId()| |A.getId() | |A.getId()|
|isVisible()|
Run Code Online (Sandbox Code Playgroud)
以及以下内容:
List<A> mappings;
Run Code Online (Sandbox Code Playgroud)
我想将B实例的所有ID映射到B.isVisible()的值,并将C实例的ID映射到TRUE
在初始问题的帮助下,我将其改进为以下格式:
mappings.stream().filter(a -> a instanceof B)
.map(b -> (B)b)
.collect(Collectors.toMap(A::getId, m -> m.isVisible()));
Run Code Online (Sandbox Code Playgroud)
丑陋的版本是:
mappings.stream()
.collect(Collectors.toMap(A::getId, m ->
{
boolean isB = m instanceof B;
return isB ? ((B) m).isVisible() : true;
}));
Run Code Online (Sandbox Code Playgroud)
有关改进它的任何帮助,以提供更优雅的版本的默认值?