在nhibernate / fluent nhibernate中有什么不同的GeneratedBy(What are the different GeneratedBy's in nhibernate/fluent nhibernate)
我正在玩nhibernate和流利的nhibernate并且看着GeneratedBy并且有很多选择(sequence,sequenceIdentity等),但我不知道他们大多数人做了什么。
我看到例如3个Guid。
GeneratedBy.Guid(); GeneratedBy.GuidComb(); GeneratedBy.GuidNative();
我听说不使用Guid()并使用GuidComb,因为它是专为处理数据库而设计的(它不会破坏索引)。
我不知道
GuidNative()
是什么。我也试图做
GeneratedBy.Native()
我认为这将使用MSSQl 2008使用的任何东西,但我遇到了它的问题
CREATE TABLE [dbo].[AutoIds]( [Id] [int] NOT NULL, [Test] [varchar](50) NULL, CONSTRAINT [PK_AutoIds] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
我在想
Id(x => x.Id).GeneratedBy.Native();
nhibernate会自动为我生成一个Id(如果我使用combGuid()就会这样做)但是当我尝试提交它时,我得到了
NHibernate.Exceptions.GenericADOException was caught Message=could not insert: [unitofwork.Models.Domain.AutoIds][SQL: INSERT INTO [AutoIds] (Test) VALUES (?); select SCOPE_IDENTITY()] Source=NHibernate SqlString=INSERT INTO [AutoIds] (Test) VALUES (?); select SCOPE_IDENTITY() StackTrace: at NHibernate.Id.Insert.AbstractReturningDelegate.PerformInsert(SqlCommandInfo insertSQL, ISessionImplementor session, IBinder binder) at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Boolean[] notNull, SqlCommandInfo sql, Object obj, ISessionImplementor session) at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Object obj, ISessionImplementor session) at NHibernate.Action.EntityIdentityInsertAction.Execute() at NHibernate.Engine.ActionQueue.Execute(IExecutable executable) at NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(Object entity, EntityKey key, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) at NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(Object entity, Object id, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) at NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object entity, String entityName, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event) at NHibernate.Event.Default.DefaultSaveEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event) at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event) at NHibernate.Event.Default.DefaultSaveEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event) at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event) at NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent event) at NHibernate.Impl.SessionImpl.Save(Object obj) at unitofwork.Models.Repository.StoreRepo.Create(AutoIds autoIds) in StoreRepo.cs:line 37 at unitofwork.Models.Service.StoreService.CreateStore() inStoreService.cs:line 40 InnerException: System.Data.SqlClient.SqlException Message=Cannot insert the value NULL into column 'Id', table 'TESTUoW.dbo.AutoIds'; column does not allow nulls. INSERT fails. The statement has been terminated. Source=.Net SqlClient Data Provider ErrorCode=-2146232060 Class=16 LineNumber=1 Number=515 Procedure="" Server=(local) State=2 StackTrace: at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlDataReader.ConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader() at NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd) at NHibernate.Id.IdentityGenerator.InsertSelectDelegate.ExecuteAndExtract(IDbCommand insert, ISessionImplementor session) at NHibernate.Id.Insert.AbstractReturningDelegate.PerformInsert(SqlCommandInfo insertSQL, ISessionImplementor session, IBinder binder) InnerException:
nhibernate可以不自动递增整数吗? 这只是一件难以跟踪的事情,以便找出下一个数字吗?
我正在玩ids,因为我很震惊地得知我这样做的方式并不是一个好方法(我在我的数据库中设置为自动递增int,这就像我一直为ado.net和linq做的那样SQL)。
每次执行保存时,都会发生对数据库的额外查询(获取pk)。 所以我正在玩,看看是什么组合导致这种情况发生。
我开始更倾向于使用Guid(尽管我更喜欢使用更短的内容,因此如果你因为某些原因需要手动查看数据库,那么在其他表中匹配会更快)。
我正在考虑hilo,但我不喜欢的是,如果我必须切换ORM来说实体框架可能不支持hilo。 再加上我听说使用HiLO,它可以很快地通过大量的id,使你需要更大的数据类型。
I am playing around with nhibernate and fluent nhibernate and looking at GeneratedBy and there so many to choose(sequence,sequenceIdentity,etc) from but I don't know what most of them do.
I see for instance 3 Guid ones.
GeneratedBy.Guid(); GeneratedBy.GuidComb(); GeneratedBy.GuidNative();
I heard not to use Guid() and use GuidComb as it is specially designed for working with databases(it does not break indexes).
I don't know what
GuidNative()
is though.I also was trying to make
GeneratedBy.Native()
I thought that would use whatever MSSQl 2008 uses but I am running into problem with it
CREATE TABLE [dbo].[AutoIds]( [Id] [int] NOT NULL, [Test] [varchar](50) NULL, CONSTRAINT [PK_AutoIds] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
I thought by doing
Id(x => x.Id).GeneratedBy.Native();
a Id would automatically be generated for me by nhibernate(it does this if I use combGuid()) but when I try to commit it I get
NHibernate.Exceptions.GenericADOException was caught Message=could not insert: [unitofwork.Models.Domain.AutoIds][SQL: INSERT INTO [AutoIds] (Test) VALUES (?); select SCOPE_IDENTITY()] Source=NHibernate SqlString=INSERT INTO [AutoIds] (Test) VALUES (?); select SCOPE_IDENTITY() StackTrace: at NHibernate.Id.Insert.AbstractReturningDelegate.PerformInsert(SqlCommandInfo insertSQL, ISessionImplementor session, IBinder binder) at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Boolean[] notNull, SqlCommandInfo sql, Object obj, ISessionImplementor session) at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Object obj, ISessionImplementor session) at NHibernate.Action.EntityIdentityInsertAction.Execute() at NHibernate.Engine.ActionQueue.Execute(IExecutable executable) at NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(Object entity, EntityKey key, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) at NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(Object entity, Object id, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) at NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object entity, String entityName, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event) at NHibernate.Event.Default.DefaultSaveEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event) at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event) at NHibernate.Event.Default.DefaultSaveEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event) at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event) at NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent event) at NHibernate.Impl.SessionImpl.Save(Object obj) at unitofwork.Models.Repository.StoreRepo.Create(AutoIds autoIds) in StoreRepo.cs:line 37 at unitofwork.Models.Service.StoreService.CreateStore() inStoreService.cs:line 40 InnerException: System.Data.SqlClient.SqlException Message=Cannot insert the value NULL into column 'Id', table 'TESTUoW.dbo.AutoIds'; column does not allow nulls. INSERT fails. The statement has been terminated. Source=.Net SqlClient Data Provider ErrorCode=-2146232060 Class=16 LineNumber=1 Number=515 Procedure="" Server=(local) State=2 StackTrace: at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlDataReader.ConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader() at NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd) at NHibernate.Id.IdentityGenerator.InsertSelectDelegate.ExecuteAndExtract(IDbCommand insert, ISessionImplementor session) at NHibernate.Id.Insert.AbstractReturningDelegate.PerformInsert(SqlCommandInfo insertSQL, ISessionImplementor session, IBinder binder) InnerException:
Can nhibernate not do auto incrementing ints? Is that just something too hard to keep track of for it to figure out the next number?
I am just playing with the ids as I was shocked to learn that the way I was doing it was not a good way(I set in my database as an auto incrementing int which is what I always did for like ado.net and linq to sql).
By doing this everytime a save happened an extra query to the db would happen(to get the pk). So I am playing around to see what combinations cause this to happen.
I am starting to lean more to using Guid(even though I rather have something a bit shorter so it is faster to match up in other tables if you got to look manually at the db for some reason).
I was thinking of hilo but the thing I don't like about that is if I ever got to switch out ORM's to say the Entity Framework the hilo might not be supported. Plus what I heard about using HiLO that it can go through tons of id's very quickly making you need bigger datatypes.
原文:https://stackoverflow.com/questions/7419685
最满意答案
JSON处理有几个API。
新的JSR-353(JEE 7的一部分)可能对您有用,您可以尝试http://www.jdom.org/来提及两个。
两者都主要遍历完整的JSON - 可以从JSON - String构造的Object。
那么如何设置文本格式呢?
如果您只想将所有内容放入文本文件中,您可以将其附加到Main类的String成员中,
如果要生成csv -text -file,则需要在数据模型的两个不同视图之间进行转换
并且应该在创建csv文件的视图之前为csv文件构建一个合适的数据模型,即实际的csv文件。There are several APIs around for JSON - processing.
The new JSR-353 (part of JEE 7) could be useful to you , you could try http://www.jdom.org/ just to mention two.
Both mainly iterate over the complete JSON - Object which can be constructed from a JSON - String.
So how to want to format your text?
If you just want to put everything into a text - file you could append to a String member of your Main - class,
if you want to produce a csv -text -file you are translating between two different views of a data model
and should build a proper data model for the csv - file before creating the view of it, the actual csv - file.
相关问答
更多-
您获得HTTP 403 (Forbbiden)状态代码的原因很可能与Twitter最近仅将流量限制为TLS相关 。 从Twitter的API更改日历中 : 2014年1月14日将api.twitter.com限制为仅限TLS通信API v1.1 默认情况下使用纯HTTP 的几个库已经更新,以符合此要求。 Twitter4j也是如此。 在版本3.0.5上,它现在默认使用TLS。 现在,如果由于某种原因,您确实不想更新库,您仍然可以通过对代码进行较小更改来使用当前版本。 ConfigurationBuilder ...
-
我正在为您发布我的实时代码。希望它适合您。 SearchTerm是search.Below方法的关键字,它将在String中返回一个json响应。 如果你想要gson序列化类。 我会为你提供 ProgressDialog pd; new DownloadTwitterTask().execute(keyword); private class DownloadTwitterTask extends AsyncTask
{ ... -
使用opencsv将来自twitter4j的查询结果写入csv(Write query result from twitter4j into csv using opencsv)[2023-11-03]
我不认为你可以直接使用writeAll() ,因为你需要事先建立一个List。 或者,您可以使用CSVWriter#writeNext(String[])在迭代QueryResult#getTweets()编写单个推文,例如: for (final Status status : result.getTweets()) { final String[] line = new String[] { Long.toString(status.getId()), status.get ... -
一个星期后,很少有白发,事实证明问题出在本地时间关闭的服务器上。 有人在推特上发布了明确的错误消息。 A week and few grey hairs later it turned out that the problem was in local time on a server which was off. Someone did a great job with clear error messages on Twitter.
-
您可以在Twitter的Streaming消息类型文档中找到所需的信息,具体来说,请查看描述消息格式的Events部分: { "target": TARGET_USER, "source": SOURCE_USER, "event":"EVENT_NAME", "target_object": TARGET_OBJECT, "created_at": "Sat Sep 4 16:10:54 +0000 2010" } 此外, UserStreamListener此文档将帮助使用方法的 ...
-
将内部json twitter4j数据的文件解析为纯文本(Parse a file with internal json twitter4j data to plain text)[2023-05-27]
JSON处理有几个API。 新的JSR-353(JEE 7的一部分)可能对您有用,您可以尝试http://www.jdom.org/来提及两个。 两者都主要遍历完整的JSON - 可以从JSON - String构造的Object。 那么如何设置文本格式呢? 如果您只想将所有内容放入文本文件中,您可以将其附加到Main类的String成员中, 如果要生成csv -text -file,则需要在数据模型的两个不同视图之间进行转换 并且应该在创建csv文件的视图之前为csv文件构建一个合适的数据模型,即实际的c ... -
我发现有另一个setMedia()方法接受输入流作为其参数之一。 这个输入流可以链接到远程图像,就像这样...... StatusUpdate statusUpdate = new StatusUpdate("Hello Twitter"); String imageUrl = "http://example.com/image.png"; URL url = new URL(imageUrl); URLConnection urlConnection = url.openConnection(); Inp ...
-
像twitter4j这样的twitter Java API是否可以与statusnet一起使用?(Does twitter Java API like twitter4j work with statusnet?)[2021-12-28]
我使用status.net(identi.ca)和基本身份验证 - 请参阅https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/account/LoginActivity.java#L124和然后https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/TwitterHelper.java#L232 您是否从status.net获得了OA ... -
尝试DataObjectFactory #createStatus(String)。 这是一个简单的静态方法,它返回一个twitter4j.Status对象。 http://twitter4j.org/en/javadoc/twitter4j/json/DataObjectFactory.html#createStatus(java.lang.String ) Try DataObjectFactory#createStatus(String). It's a simple static method th ...
-
上面的'phiX'答案会给你整个推文作为Json。 如果你只想要推特的某些特定部分作为json,请检查一下。 下载项目,根据需要修改com.tweetDownload.dataformat.Tweet和com.tweetDownload.service.CustomStatusListener文件。 这个库基本上做的是它下载基于搜索词的推文,包括主题标签和提及,以及twitter识别的语言,基于数据格式类解析相关信息,将该信息转换为Json格式并将其存储在本地fileSystem上。 所有这些应用程序参数( ...